Jump to content

rwblinn

Members
  • Gesamte Inhalte

    121
  • Benutzer seit

  • Letzter Besuch

Alle erstellten Inhalte von rwblinn

  1. Nachtrag Node-RED openhab2 nodes. Erfolgreich getestet barometer & lcd20x4 bricklet. Keine openhab2 rules oder script dateien verwendet. Dashboard mit addon nodes node-red-dashboard. lcdbaro.flow
  2. OK. Rule funktioniert. Getestet: Alternativ item update, ohne action, aber mittels sendCommand rule "System Start" when System started then // LCD backlight on // Switch TF_LCDBacklight "LCDBacklight" { channel="tinkerforge:brickletlcd20x4:rTS:BrickletLCD20x4Backlight" } TF_LCDBacklight.sendCommand("ON"); end // LCD 20x4 Display airpressure using sendCommand // Number TF_Barometer "Pressure [%.3f mBar]" { channel="tinkerforge:brickletbarometer:jXZ:BrickletBarometerAirPressure" } // String TF_LCD "LCD" { channel="tinkerforge:brickletlcd20x4:rTS:BrickletLCD20x4Text"} // String TF_LCDClear "LCDClear" { channel="tinkerforge:brickletlcd20x4:rTS:BrickletLCD20x4ClearDisplay" } rule "LCD update airpressure sendcommand" when Item TF_Barometer received update then // Time HH:MM:SS val lastUpdate = new DateTimeType().format("%1$tH:%1$tM:%1$tS"); // Get airpressure val airPressure = (TF_Barometer.state) as DecimalType; // Update lcd // TF_LCDBacklight.sendCommand("ON"); - see rule System Start TF_LCDClear.sendCommand("Clear"); TF_LCD.sendCommand("0," + (20 - lastUpdate.length()).toString() + "," + lastUpdate); TF_LCD.sendCommand("1,0," + String::format("%1$.4f",airPressure.floatValue) + " hPa"); end
  3. Node-RED openhab nodes: wollte mal checken ob diese als alternative zu rules (DSL based on Xtend) verwendet werden können. Node-RED mit Tinkerforge MQTT funktioniert sehr gut. Rule: test Barometer & LCD20x4 /* openHAB 2 - Test & learn Tinkerforge Master Brick + Barometer & LCD20x4 Bricklets Notes: Barometer update interval is set using the PaperUi > Thing BaroBricklet > Channel Air Pressure Always check the log after changes: /var/log/openhab2/openhab.log or http://192.168.N.NNN:9001/ Define var (and not val) for variables that are reassigned: val -> value (a fixed value, not to be changed during runtime) var -> variable (can be changed during runtime, anytime) */ // LCD 20x4 Display airpressure rule "LCD update airpressure" when Item TF_Barometer received update then // Get action objects val lcdActions = getActions("tinkerforge", "tinkerforge:brickletlcd20x4:rTS"); val baroActions = getActions("tinkerforge", "tinkerforge:brickletbarometer:jXZ"); // Get airpressure var Number airPressure = baroActions.brickletBarometerGetAirPressure().get("airPressure"); airPressure = airPressure * 0.001; // Update LCD. The line and pos must be initialized. lcdActions.brickletLCD20x4ClearDisplay(); var line = 0; var pos = 0; // Time HH:MM:SS val lastUpdate = new DateTimeType().format("%1$tH:%1$tM:%1$tS"); line = 0; pos = 20 - lastUpdate.length(); lcdActions.brickletLCD20x4WriteLine(line as short, pos as short, lastUpdate); // Airpressure displayed with 2 digits line = 1; pos = 0; lcdActions.brickletLCD20x4WriteLine(line as short, pos as short, String::format("%1$.2f",airPressure) + " hPa"); end liefert INFO hinweise im openhab.log ==> /var/log/openhab2/openhab.log <== 2020-07-22 08:48:52.194 [INFO ] [el.core.internal.ModelRepositoryImpl] - Validation issues found in configuration model 'tf1.rules', using it anyway: The method brickletBarometerGetAirPressure(ThingActions) from the type BrickletBarometerActions refers to the missing type Object The method brickletLCD20x4ClearDisplay(ThingActions) from the type BrickletLCD20x4Actions refers to the missing type Object The method brickletLCD20x4WriteLine(ThingActions, short, short, String) from the type BrickletLCD20x4Actions refers to the missing type Object 2020-07-22 08:48:52.266 [INFO ] [el.core.internal.ModelRepositoryImpl] - Refreshing model 'tf1.rules'
  4. Danke für die info. Denke der weg über die paperui ist gut, da die things auch über die paperui definiert wurden, wo auch die channels konfiguriert sind/können. Falls textuelle konfiguration für things, dann is die astro binding ein gutes beispiel wo auch parameter gesetzt werden. Nächste frage: Node-RED openhab2 nodes Können diese auch für die Tinkerforge openhab2 bindings verwendet werden? Habe Barometer Bricklet getestet=OK; LCD20x4 Bricklet=Nicht OK (liefert null) Welche syntax ist für die openhab2-out node payload zu verwenden? beispiel: LCD20x5 writeline.
  5. Newbie Frage: wie wird ein Channel Parameter for ein item definiert. Beispiel Air Pressure: Number TF_Barometer "Pressure [%.3f mBar]" { channel="tinkerforge:brickletbarometer:jXZ:BrickletBarometerAirPressure" } Parameter "Update Interval" wo definieren? Number TF_Barometer "Pressure [%.3f mBar]" { channel="tinkerforge:brickletbarometer:jXZ:BrickletBarometerAirPressure" ???} Air Pressure The measured air pressure
  6. Funktioniert = downloaded tinkerforge-2.1.28.jar (maven) , kopiert ins addon verzeichnis, brickd installiert und openhab restartet.
  7. Hallo, erhalte den gleichen fehler wie schon gemeldet: 2020-07-20 15:52:08.462 [WARN ] [org.apache.felix.fileinstall ] - Error while starting bundle: file:/usr/share/openhab2/addons/org.openhab.binding.tinkerforge-2.5.6-SNAPSHOT.jar org.osgi.framework.BundleException: Could not resolve module: org.openhab.binding.tinkerforge [133] Unresolved requirement: Import-Package: org.openhab.core.automation.annotation; resolution:="optional" Unresolved requirement: Import-Package: com.tinkerforge; version="[2.1.0,3.0.0)" Im Verzeichnis \usr\share\openhab2\addons befinden sich die beiden jar Dateien: ls /usr/share/openhab2/addons org.openhab.binding.tinkerforge-2.5.6-SNAPSHOT.jar tinkerforge-2.1.26.jar [16:05:57] openhabian@openhab:~$ Raspberry Pi mit openhab2 version stable 2.5.6-2
  8. Danke für die Hinweise. Habe erst mal gestoppt (bevor das HAT oder Bricklets zerstört werden!) und werde auf das ESP32 Board warten. Vielen nochmal für den Support.
  9. ACHTUNG: Tests mit Arduino UNO & MEGA gestoppt, da ohne Pegelwandler 5V -> 3.3V ausgeführt = Gefahr Bricklet Zerstörung. Siehe Post #1: Arduinos mit AVR-Mikrocontroller (z.b. der Arduino Uno und Mega) haben einen Logikpegel von 5V und brauchen deshalb einen Pegelwandler zwischen dem Arduino und dem Bricklet. Bricklets haben einen Logikpegel von 3,3V. Update: Habe das HAT Zero erhalten und gestartet mit einem Arduino MEGA und LED Blink Beispiel. Frage vorweg Wie müßen die CS Ports im ino Sketch deklariert werden. Lt Doku gibt es 5 CS pins aber 4 Ports A-D? Wiring: Chip Select Pins HAT (=MEGA): 13 (=53), 16(=49), 18(=47), 15(=45), 22 (=43) 1 Bricklet IO4 an Port A Deklaration ino Sketch: TF_Port ports[1] = { { .chip_select_pin=53, .port_name='A' }}; LED Blink Beispiel funktioniert. Hinweis: nach Upload, Power HAT Zero wegnehmen und wieder anschließen sonst passiert nichts oder Fehler -10 erscheint nach der HAT Init. 2 Bricklets IO4 (Port A) und IO16 (Ports B) Deklaration ino Sketch: TF_Port ports[2] = { { .chip_select_pin=53, .port_name='A' }, { .chip_select_pin=49, .port_name='B' }}; Fehlermeldung -10 nach der HAT Init. Denke: Das Wiring x-mal überprüft, ist doch ein wenig unübersichtlich = vieleicht besser auf das neue Tinkerforge ESP32 Board warten.
  10. Danke für die ausführliche Infos. Werde es (erstmal) mit einem HAT Zero Brick versuchen …
  11. Danke - Post #2 mit Source angepasst. Nächster Test: Multiple Bricklets an einem Arduino MEGA & NodeMCU. Fragen dazu (bin kein Elektroniker): Welchen "tri-state buffer chip" wird empfohlen (muß ich bestellen, zB 74HC125)? Erbitte Wiring Beispiel(e) für 2-3 Bricklets? Können an einem Breakout (v1) mehrere Bricklets angeschlossen werden? Wie werden die Ports für die einzelnen Bricklets deklariert? Macht es Sinn bei der Port deklaration auch die Bricklet UID zu definieren?
  12. Funktioniert. Klasse! Danke. Logik angepasst = nur jeweils einmal drücken um LED ON oder OFF zu setzen. Im Anhang die letzte Version. PS: Im Anhang noch ein ino Beispiel wo keine externe Deklarationen verwendet werden = "alles in einem" - wollte mal checken ob direkt aus der ino, Tinkerforge Funktionen aufgerufen werden können. io4ledserial.ino io4ledbtn.c
  13. Im Buttonbeispiel, die Loop geändert: void io4ledbtn_loop(TF_HalContext *hal) { tf_io4_v2_callback_tick(&io, 250); // tf_io4_v2_get_value(&io, io_ret_value); // Handle button pressed to set the led state on or off. // The values button_pressed and led_state are set in the button callback io4ledbtn_cb_input_value() if (button_pressed == true){ tf_hal_log_info("LED state set to %s", led_state ? "true" : "false"); tf_io4_v2_set_selected_value(&io, 0, led_state); } } Die Bedingung wird ausgeführt, aber nicht die Function tf_io4_v2_set_selected_value(). Habe verschiedene timeouts probiert. Push-button pressed channel 1. Led state true LED state set to true Übrigens: der Test io4led erfolgreich auf folgende Microcontroller: Arduino UNO, Arduino MEGA, ESP-WROOM-32.
  14. Danke für die weiteren Infos. Fragen dazu: Die 5V werden dann anscheinend nicht benötigt da die Bricklets mit 3V3 auskommen? Habe die 5V Leitung zum Breakout weggelassen (nur 3V3) und die Tests funktionieren, sowohl bei einem Arduino UNO und ESP-Wroom-32. Das mit dem Callbacks habe ich nicht verstanden. Erbitte Beispiel, wo ein Input Signal verarbeitet wird. In meinem Button Beispiel, setzt der Callback nur einen Flag der in der Loop verarbeitet wird.
  15. Danke für die Bindings = sehr gut. ACHTUNG: Tests mit Arduino UNO & MEGA gestoppt, da ohne Pegelwandler 5V -> 3.3V ausgeführt = Gefahr Bricklet Zerstörung. Siehe Post #1: Arduinos mit AVR-Mikrocontroller (z.b. der Arduino Uno und Mega) haben einen Logikpegel von 5V und brauchen deshalb einen Pegelwandler zwischen dem Arduino und dem Bricklet. Bricklets haben einen Logikpegel von 3,3V. Aufbau Arduino UNO <-> Tinkerforge Breakout Bricklet V1 <-> Tinkerforge IO4 Bricklet V2 <-> LED & Push-Button. Tests LED 10x blinken (io4led) Push-button LED an | aus (io4ledbtn) Im Anhang: Beschreibung (PDF, En), Source Code. tf-microcontroller-example.zip
  16. Confirmed working ok. Tested various RPi. Thanks a lot for your help. Appreciated.
  17. Tested = same error - running Python 2.7.16 (default, Oct 10 2019, 22:02:15) [GCC 8.3.0] on linux2 on a Raspberry Pi 3B+ (Buster) 2020-05-11 12:30:39,165 <DEBUG> MQTT bindings: Calling function write_line for device rTS of type lcd_20x4_bricklet. 2020-05-11 12:30:39,167 <ERROR> MQTT bindings: argument for 's' must be a string (call of write_line of lcd_20x4_bricklet rTS) 2020-05-11 12:30:39,169 <DEBUG> MQTT bindings: Calling function write_line for device rTS of type lcd_20x4_bricklet succedded. 2020-05-11 12:30:39,170 <DEBUG> MQTT bindings: Publishing response to tinkerforge/response/lcd_20x4_bricklet/rTS/write_line 2020-05-11 12:30:39,172 <DEBUG> paho.mqtt.client: Sending PUBLISH (d0, q0, r0, m5), 'tinkerforge/response/lcd_20x4_bricklet/rTS/write_line', ... (2 bytes)
  18. Thanks for the update. 1/ Confirmed get_identity working. tinkerforge/request/lcd_20x4_bricklet/rTS/get_identity (null) tinkerforge/response/lcd_20x4_bricklet/rTS/get_identity {"connected_uid": "5VGrDJ", "uid": "rTS", "device_identifier": "lcd_20x4_bricklet", "hardware_version": [1, 2, 0], "position": "b", "firmware_version": [2, 0, 6], "_display_name": "LCD 20x4 Bricklet"} 2/ Write_line not working. Does this happen every time you attempt to call write_line? YES, tried on two different RPi's running latest bindings or only in specific cases? NO Did you call any other functions before calling write_line? Using bash script (tested on the two systems): cat lcd2004_write_line.sh #!/bin/bash mosquitto_pub -t tinkerforge/request/lcd_20x4_bricklet/rTS/backlight_on -m '' mosquitto_pub -t tinkerforge/request/lcd_20x4_bricklet/rTS/clear_display -m '' mosquitto_pub -t tinkerforge/request/lcd_20x4_bricklet/rTS/write_line -m '{"line": 0, "position": 0, "text":"Hello World"}'
  19. Environment: Raspberry Pi (Raspian Buster), Python 2.7.16, MQTT Bindings 2.0.9 Issue: Publishing sample text is not displayed: mosquitto_pub -t tinkerforge/request/lcd_20x4_bricklet/rTS/write_line -m '{"line": 0, "position": 0, "text":"TEST"}' Ran Tinkerforge_mqtt with debug flag - shows an error 2020-05-08 18:42:57,560 <DEBUG> MQTT bindings: Calling function write_line for device rTS of type lcd_20x4_bricklet. 2020-05-08 18:42:57,562 <ERROR> MQTT bindings: argument for 's' must be a string (call of write_line of lcd_20x4_bricklet rTS) 2020-05-08 18:42:57,563 <DEBUG> MQTT bindings: Calling function write_line for device rTS of type lcd_20x4_bricklet succedded. 2020-05-08 18:42:57,564 <DEBUG> MQTT bindings: Publishing response to tinkerforge/response/lcd_20x4_bricklet/rTS/write_line 2020-05-08 18:42:57,569 <DEBUG> paho.mqtt.client: Sending PUBLISH (d0, q0, r0, m8), 'tinkerforge/response/lcd_20x4_bricklet/rTS/write_line', ... (2 bytes) 2020-05-08 18:42:57,572 <DEBUG> MQTT bindings: Tested the same with a) brick viewer: text is displayed, b) Python bindings = text is displayed. Also tried other lcd20x4 mqtt functions: backlight_on & off = OK get_identity = error 2020-05-08 18:55:50,901 <DEBUG> MQTT bindings: Calling function get_identity for device rTS of type lcd_20x4_bricklet. 2020-05-08 18:55:50,909 <DEBUG> MQTT bindings: Calling function get_identity for device rTS of type lcd_20x4_bricklet succedded. Traceback (most recent call last): File "/usr/local/bin/tinkerforge_mqtt", line 7366, in on_message response = self.dispatch_call(request_type, device, uid, function, payload, response_path) File "/usr/local/bin/tinkerforge_mqtt", line 7717, in dispatch_call return self.device_call(device, device_class_name, uid, fnName, fnInfo, json_args) File "/usr/local/bin/tinkerforge_mqtt", line 7823, in device_call d["_display_name"] = display_names[dev_id] NameError: global name 'display_names' is not defined
  20. [SOLVED] Rebooted the Raspberry Pi and the MQTT Bindings are working ok. Tested from the CLI and also using Node-RED flow. Thanks for help anyhow.
  21. Please find the output of running the bindings with parameter --debug. Changed the period to 5000. 2020-01-24 10:10:29,786 <DEBUG> paho.mqtt.client: Sending PUBLISH (d0, q0, r0, m582), 'b'tinnse/air_quality_bricklet/Jvj/get_all_values_callback_configuration'', ... (46 bytes) 2020-01-24 10:10:48,678 <DEBUG> paho.mqtt.client: Sending PUBLISH (d0, q0, r0, m586), 'b'tinkerforge/callback/air_quality_bricklet/Jvj/all_values'', ... (109 bytes) 2020-01-24 10:10:53,637 <DEBUG> paho.mqtt.client: Sending PUBLISH (d0, q0, r0, m587), 'b'tinkerforge/callback/air_quality_bricklet/Jvj/all_values'', ... (109 bytes) 2020-01-24 10:10:58,600 <DEBUG> paho.mqtt.client: Sending PUBLISH (d0, q0, r0, m588), 'b'tinkerforge/callback/air_quality_bricklet/Jvj/all_values'', ... (109 bytes) 2020-01-24 10:11:03,561 <DEBUG> paho.mqtt.client: Sending PUBLISH (d0, q0, r0, m589), 'b'tinkerforge/callback/air_quality_bricklet/Jvj/all_values'', ... (109 bytes) 2020-01-24 10:11:08,513 <DEBUG> paho.mqtt.client: Sending PUBLISH (d0, q0, r0, m590), 'b'tinkerforge/callback/air_quality_bricklet/Jvj/all_values'', ... (109 bytes) 2020-01-24 10:11:13,478 <DEBUG> paho.mqtt.client: Sending PUBLISH (d0, q0, r0, m591), 'b'tinkerforge/callback/air_quality_bricklet/Jvj/all_values'', ... (109 bytes)
  22. Hi, tried to setup an Air Quality Bricklet for MQTT Callback with a Raspberry Pi 4 running mosquito and the Tinkerforge MQTT Binding 2.0.6. The Brick Viewer shows all data; An MQTT request provides also the data (see below …/get_all_values request with response), but with MQTT callback no response. Question: what is wrong in below configuration? pi@4dev:~ $ mosquitto_pub -t tinkerforge/request/air_quality_bricklet/Jvj/set_all_values_callback_configuration -m '{"period": 100, "value_has_to_change":false}' pi@4dev:~ $ mosquitto_pub -t tinkerforge/register/air_quality_bricklet/Jvj/all_values -m '{"register": true}' OUTPUT pi@4dev:~ $ mosquitto_sub -v -t tinkerforge/# tinkerforge/request/air_quality_bricklet/Jvj/set_all_values_callback_configuration {"period":10,"value_has_to_change":false} tinkerforge/register/air_quality_bricklet/Jvj/all_values {"register":true} tinkerforge/request/air_quality_bricklet/Jvj/get_all_values {} tinkerforge/response/air_quality_bricklet/Jvj/get_all_values {"iaq_index": 26, "iaq_index_accuracy": "low", "temperature": 2100, "humidity": 5403, "air_pressure": 102912}
  23. OK = thanks for the update. Tested successfully: lcd.writeLine((short)0, (short)0, "Battery: " + "\u0008");
  24. Just a suggestion for a small change regarding writing a custom character with Java. Test Java Snippet // Custom Char battery assigned to index 0 (from max 7) short[] battery = new short[]{14,27,17,17,17,17,17,31}; lcd.setCustomCharacter((short)0, battery); // Display the custom char with some text lcd.writeLine((short)0, (short)0, "Battery: " + (char)0x08); Suggestion Java documentation: For section void BrickletLCD20x4.setCustomCharacter(short index, short[] character) change the line: The characters can later be written with writeLine() by using the characters with the byte representation 8 ("x08") to 15 ("x0F"). to The characters can later be written with writeLine() by using the characters with the byte representation 8 ( (char)0x08 ) to 15 ( (char)0x0F ).
  25. Got it - overlooked the documentation "A value of 0 turns the callback off." = got mis leaded by the default value 0 (period – Type: int, Unit: 1 ms, Range: [0 to 232 - 1], Default: 0). After changing, its working fine. Thanks for the swift help.
×
×
  • Neu erstellen...