Script: Bit Maniqulation
Moderator: Co-Administratoren
Script: Bit Maniqulation
Hallo liebe Gemeinde,
hat sich jemand schon mal mit Bit Maniqulation im Homematic Script beschäftigt ?
Ich möchte gerne z.B. bei einer 16 Bit integer Variable die einzelnen Bits setzen bzw. zurücksetzen (0000 0000 1010 1010 ) und den Zustand der gesetzten Bits über eine if() Bedingung abfragen.
Über ein funktionierendes Beispiel würde ich mich freuen.
Viele Grüße
HubiB
hat sich jemand schon mal mit Bit Maniqulation im Homematic Script beschäftigt ?
Ich möchte gerne z.B. bei einer 16 Bit integer Variable die einzelnen Bits setzen bzw. zurücksetzen (0000 0000 1010 1010 ) und den Zustand der gesetzten Bits über eine if() Bedingung abfragen.
Über ein funktionierendes Beispiel würde ich mich freuen.
Viele Grüße
HubiB
-
- Beiträge: 12928
- Registriert: 16.01.2009, 18:48
- Wohnort: Steingaden
- Hat sich bedankt: 1604 Mal
- Danksagung erhalten: 222 Mal
Re: Script: Bit Maniqulation
Hallo,
gut wäre es die eigenen ansätze zu zeigen ..
gut wäre es die eigenen ansätze zu zeigen ..
-------
!!! der download der handbüchern auf den seiten von eq3 und das lesen der tips und tricks kann das hm-leben sehr erleichtern - das nutzen der suche nach schlagworten ebenso !!!
wer schreibfehler findet darf sie behalten.
!!! der download der handbüchern auf den seiten von eq3 und das lesen der tips und tricks kann das hm-leben sehr erleichtern - das nutzen der suche nach schlagworten ebenso !!!
wer schreibfehler findet darf sie behalten.
-
- Beiträge: 12115
- Registriert: 20.11.2016, 20:01
- Hat sich bedankt: 848 Mal
- Danksagung erhalten: 2150 Mal
- Kontaktdaten:
Re: Script: Bit Maniqulation
Soweit ich weiß, geht das nur dezimal; binäre Darstellung geht in HM Skript nicht.
Code: Alles auswählen
integer a = 11;
if (a & 1) ... ! ist true
if (a & 2) ... ! ist true
if (a & 4) ... ! ist false
if (a & 8) ... ! ist true
Geht dann auch nur dezimal.
Zurücksetzen z.B. if (a & 8 ) { a = a - 8;}
bzw. umgekehrt das Setzen if ((a&8)==false) { a = a + 8;}
-
- Beiträge: 10660
- Registriert: 21.09.2012, 08:09
- System: CCU
- Wohnort: Stuttgart
- Hat sich bedankt: 321 Mal
- Danksagung erhalten: 501 Mal
Re: Script: Bit Maniqulation
Einen ersten Ansatz könnte auch das hier liefern.
CCU3 mit stets aktueller FW und den Addons "CUxD" und "Programmedrucken", ioBroker auf Synology DiskStation DS718+ im Docker-Container;
einige Projekte: zentrales Push-Nachrichten-Programm zPNP, DoorPi-Videotürsprechanlage, An- und Abwesenheitsdetektion per Haustürschloss, zentrales Programm zur Steuerung von Beschattungsgeräten zBSP.
einige Projekte: zentrales Push-Nachrichten-Programm zPNP, DoorPi-Videotürsprechanlage, An- und Abwesenheitsdetektion per Haustürschloss, zentrales Programm zur Steuerung von Beschattungsgeräten zBSP.
-
- Beiträge: 9679
- Registriert: 27.04.2020, 10:34
- System: CCU
- Hat sich bedankt: 700 Mal
- Danksagung erhalten: 1626 Mal
Re: Script: Bit Maniqulation
Das ist ein gutes Beispiel dafür, daß man mit mehr Informationen sinnvollere Lösungen liefern könnte.
LG, Michael.
Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.
Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++
Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.
Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++
Re: Script: Bit Maniqulation
Hallo liebe Gemeinde,
danke für die bisherige Antworten, wie ich sehe und vermutet habe geht es leider nicht binär . Obwohl der Ansatz laut Handbuch mit der Verundung oder Veroderung zum Setzen und löschen von Bits gegeben wäre. So eine binäre Statusvariable wäre durchaus sinnvoll, wenn man mehre Status Flags setzen bzw. zurücksetzen und danach abfragen will. Dadurch könnte man z.B. 16 Flags in einer integer Variable verwalten.
Vielleicht gibt es einen Ansatz dieses zu implementieren oder ein funktionierendes Beispiel ?
Viele Grüße
hubiB
danke für die bisherige Antworten, wie ich sehe und vermutet habe geht es leider nicht binär . Obwohl der Ansatz laut Handbuch mit der Verundung oder Veroderung zum Setzen und löschen von Bits gegeben wäre. So eine binäre Statusvariable wäre durchaus sinnvoll, wenn man mehre Status Flags setzen bzw. zurücksetzen und danach abfragen will. Dadurch könnte man z.B. 16 Flags in einer integer Variable verwalten.
Vielleicht gibt es einen Ansatz dieses zu implementieren oder ein funktionierendes Beispiel ?
Viele Grüße
hubiB
- stan23
- Beiträge: 2039
- Registriert: 13.12.2016, 21:14
- System: Alternative CCU (auf Basis OCCU)
- Wohnort: Altmühltal
- Hat sich bedankt: 585 Mal
- Danksagung erhalten: 336 Mal
- Kontaktdaten:
Re: Script: Bit Maniqulation
Bitweises Testen hat Jérôme doch im dritten Beitrag gezeigt, und das Setzen und Rücksetzen hat Black hier beschrieben:
Einzig das ^ (bitweise Invertierung) würde ich in ReGa Skript vermissen, aber ansonsten ist doch alles da?
Viele Grüße
Marco
RaspberryMatic als VM auf einem NUC mit Proxmox und USB-Funkmodul
~80 Geräte (HM, HmIP, HMW, HBW, AskSin)
Marco
RaspberryMatic als VM auf einem NUC mit Proxmox und USB-Funkmodul
~80 Geräte (HM, HmIP, HMW, HBW, AskSin)
-
- Beiträge: 9679
- Registriert: 27.04.2020, 10:34
- System: CCU
- Hat sich bedankt: 700 Mal
- Danksagung erhalten: 1626 Mal
Re: Script: Bit Maniqulation
Und was ist dein Ziel? Speicherplatz sparen?
LG, Michael.
Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.
Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++
Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.
Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++
Re: Script: Bit Maniqulation
Hallo,
dieses Beispiel kenne ich schon, aber es funktioniert nicht richtig, falls es jemand schon mal probiert hat.
Hier meine Ergebnisse laut Beispiel:
integer value= 48; ! => 0011 0000
! Bit Setzen
value= value | 4;
WriteLine("Set BIT " # value); ! => 52, 00110100
! Bit löschen
value = value & 47;
WriteLine("Del BIT " # value); ! => 36, 0010 0100
Beim zurücksetzen sollte doch zu mindestens wieder 52 herauskommen ?
Zu der Frage was mein Ziel ist, ich muß mehre Statusflags verwalten, wenn ich das über einzelne boolean Flags (16x) mache bekomme einen unübersichtlichen Code.
VG
hubiB
dieses Beispiel kenne ich schon, aber es funktioniert nicht richtig, falls es jemand schon mal probiert hat.
Hier meine Ergebnisse laut Beispiel:
integer value= 48; ! => 0011 0000
! Bit Setzen
value= value | 4;
WriteLine("Set BIT " # value); ! => 52, 00110100
! Bit löschen
value = value & 47;
WriteLine("Del BIT " # value); ! => 36, 0010 0100
Beim zurücksetzen sollte doch zu mindestens wieder 52 herauskommen ?
Zu der Frage was mein Ziel ist, ich muß mehre Statusflags verwalten, wenn ich das über einzelne boolean Flags (16x) mache bekomme einen unübersichtlichen Code.
VG
hubiB
-
- Beiträge: 9679
- Registriert: 27.04.2020, 10:34
- System: CCU
- Hat sich bedankt: 700 Mal
- Danksagung erhalten: 1626 Mal
Re: Script: Bit Maniqulation
Und wie wäre es mit durch ; getrennte Strings, die du mit den Web befehlen verarbeitest?
LG, Michael.
Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.
Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++
Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.
Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++