LogicMachine Forum
Convert 2 byte to bits - Printable Version

+- LogicMachine Forum (https://forum.logicmachine.net)
+-- Forum: LogicMachine eco-system (https://forum.logicmachine.net/forumdisplay.php?fid=1)
+--- Forum: Scripting (https://forum.logicmachine.net/forumdisplay.php?fid=8)
+--- Thread: Convert 2 byte to bits (/showthread.php?tid=5402)



Convert 2 byte to bits - Joep - 02.05.2024

From a Gira weatherstation i recieive an error code as a 2 byte value. Each bit represents an error code like below.
Now i like to create a text object that shows the current state of this error object. So if there's one or more error it should show me all errors (in a loop by more then one error).


Bit 0: Condensatiebeveiliging actief
Bit 1: Droogfase van het sensoroppervlak
Bit 2: Waarden van digitaal-analoogomzetter ongeldig
Bit 3: Meetwaarde van druksensor ongeldig
Bit 4: Meetwaarde van helderheidssensor noord ongeldig
Bit 5: Meetwaarde helderheidssensor oost ongeldig
Bit 6: Meetwaarde van helderheidssensor zuid ongeldig
Bit 7: Meetwaarde van helderheidssensor west ongeldig
Bit 8: Schemermeetwaarde ongeldig
Bit 9: Meetwaarde van globale stralingssensor ongeldig
Bit 10: Meetwaarde van luchttemperatuursensor ongeldig
Bit 11: Meetwaarde van neerslagsensor ongeldig
Bit 12: Meetwaarde van windsnelheidssensor ongeldig
Bit 13: Meetwaarde van windrichtingsensor ongeldig
Bit 14: Meetwaarde van de vochtmeting ongeldig
Bit 15: Interne systeemfout


RE: Convert 2 byte to bits - admin - 02.05.2024

See this: https://forum.logicmachine.net/showthread.php?tid=1081


RE: Convert 2 byte to bits - Joep - 02.05.2024

(02.05.2024, 07:46)admin Wrote: See this: https://forum.logicmachine.net/showthread.php?tid=1081

Thanks admin. So far so good.. But now i like to make a text loop showing each error for 2 seconds.

Code:
value = event.getvalue() errors = {     [0] = 'Condensatiebeveiliging actief',     [1] = 'Droogfase van het sensoroppervlak',     [2] = 'Waarden van digitaal-analoogomzetter ongeldig',     [3] = 'Meetwaarde van druksensor ongeldig',     [4] = 'Meetwaarde van helderheidssensor noord ongeldig',     [5] = 'Meetwaarde helderheidssensor oost ongeldig',     [6] = 'Meetwaarde van helderheidssensor zuid ongeldig',     [7] = 'Meetwaarde van helderheidssensor west ongeldig',     [8] = 'Schemermeetwaarde ongeldig',     [9] = 'Meetwaarde van globale stralingssensor ongeldig',     [10] = 'Meetwaarde van luchttemperatuursensor ongeldig',     [11] = 'Meetwaarde van neerslagsensor ongeldig',     [12] = 'Meetwaarde van windsnelheidssensor ongeldig',     [13] = 'Meetwaarde van windrichtingsensor ongeldig',     [14] = 'Meetwaarde van de vochtmeting ongeldig',     [15] = 'Interne systeemfout', } result = {} for i = 0, 15 do   mask = bit.lshift(1, i)   if bit.band(mask, value) ~= 0 then     if errors[ i ] then       table.insert(result, errors[ i ])     end   end end text = table.concat(result, '\n') grp.update('5/6/3', text)



RE: Convert 2 byte to bits - admin - 02.05.2024

Set the event script execution mode to "Last instance only" and add this code:
Code:
if #result == 0 then   return end while true do   for _, text in ipairs(result) do     grp.update('5/6/3', text)     os.sleep(2)   end end



RE: Convert 2 byte to bits - Joep - 02.05.2024

(02.05.2024, 11:50)admin Wrote: Set the event script execution mode to "Last instance only" and add this code:
Code:
if #result == 0 then   return end while true do   for _, text in ipairs(result) do     grp.update('5/6/3', text)     os.sleep(2)   end end

Thanks admin. This works great.