NEWS
Wie SDS011 / SPS30 Staubsensor mit I2C über LAN zu IOBroker?
-
@ralla66 Gute Arbeit!
Habe leider erst heute Deinen Post gesehen
Damit ich das richtig verstehe....
Du hast in Tasmota die GPIO zugeordnet und wo auch immer das Script reingeladen. Dann bekommst Du die Werte in Tasmota angezeigt.
Dann hast Du ein Terminalprogramm geöffnet und die Adresse vom ESP eingegben.
Daraufhin wird Dir der Daten-Stream fortwährend angezeigt.
Somit ist der Beweis der Übergabe erbracht.Wie macht das dann der serial zu LAN Adapter? Was macht der aus dem Datenoutput?
Eine Weboberfläche wird er wohl nicht haben um Werte zuweisen zu können, oder?
Abruf per NodeRed mittels IP und Port (den man ja auch erstmal wissen muss...)?Ich habe mir den Sensirion SPS30 bestelllt (UART und I2C) und den 2CH UART to Ethernet Converter. Einen RasPi 4b habe ich noch hier.
Übrigens, man kann ja weitere ioBroker clienten beim "Master" anmelden.
Bedeutet, dass ich den SPS30 auch direkt an einen RasPi mit LAN verdrahten kann und auf den Raspi ioBroker lade. Mit dem I2C - Adapter sollte es dann möglich sein, die Werte als Objekt zu bekommen. Ein RasPi 3b kostet ca. 34€ und hat LAN schon an Bord.
Der ESP8266 (laufen bei mir 3 Stück) kostet ca. 10€ plus den serial zu LAN Adapter...oder kann man auch einen ESP mit LAN nehmen...???Der Vorteil des ESP liegt natürlich auf der Hand und wird hier gut beschrieben: https://www.raspberry-pi-geek.de/ausgaben/rpg/2016/02/mikrocontroller-esp8266-fuer-automationsaufgaben-im-iot/
-
Halleluja
https://tasmota.github.io/docs/SPS30/SPS30 + ESP32 Ethernet + Tasmota MQTT -> IOBroker MQTT = müsste doch funktionieren!!!
-
der Sensor geht auch
-
Da stehts doch ....
https://github.com/thryvos/Tasmota-WT32-ETH01Dann müsste man doch auch MQTT in ioBroker nutzen können.
-
Jetzt müsste ich nur noch wissen ob WT32-ETH01 oder Olimex ESP32-POE?
-
Ich habs geschafft
Hier mein Bericht:
Hardware:
1x Sensirion SPS30 (Wichtig: Kabel mit Stecker nicht dabei, man braucht einen JST 1.5 ZH 5 Pin Steckverbinder )
1x WT32_Eth01
1x USB zu UART Adapter
Kabel (Jumper wire Kabel female to female)Zuerst habe ich mir folgende Seite angesehen: https://github.com/thryvos/Tasmota-WT32-ETH01/tree/main?tab=readme-ov-file
Dort sieht man den Aufbau der Kabelverbindungen zwischen dem USB zu UART und dem W32-Eth01.Hier mein Aufbau:
Strom DC 5V kommt über ein USB-Netzteil
Dann USB-Kabel am roten USB zu UART Adapter anschließen und los gehts....Aber wie?
Man braucht eine Software um die seriellen-Daten über USB schicken zu können.
Die hier hatte ich zuerst: https://github.com/arendst/Tasmota/issues/9496#issuecomment-750148023
Damit konnte ich zwar den W32-Eth01 zum Leben erwecken mit LAN und Wifi aber keine Verbindung zum SPS30 herstellen.
Dann kam ich auf Otto Vielen Dank OTTO!!!
https://heinz-otto.blogspot.com/2021/06/tasmota-firmware-selbst-gebaut.html#:~:text=Hintergrund%3A Im Hintergrund wird die,komplette Datei für später herunterladen.&text=Im letzten Punkt wird die,ausgewählt und die Kompilierung gestartet.Ich ging nach Ottos Anleitung vor und erweiterte meinen Github-Account um Gitpod.
Damit konnte ich dann zum TasmoCompiler v11.2.1 gelangen, um dort die nötigen Einstellungen für "meine" Tasmota-Firmware zu treffen.
#define USE_ETHERNET // Add support for ethernet (Currently fixed for Olimex ESP32-PoE) // WT32_ETH01 #define ETH_TYPE 0 // [EthType] 0 = ETH_PHY_LAN8720, 1 = ETH_PHY_TLK110/ETH_PHY_IP101, 2 = ETH_PHY_RTL8201, 3 = ETH_PHY_DP83848, 4 = ETH_PHY_DM9051, 5 = ETH_PHY_KSZ8081 #define ETH_ADDRESS 1 // [EthAddress] 0 = PHY0 .. 31 = PHY31 #define ETH_CLKMODE 0 // [EthClockMode] 0 = ETH_CLOCK_GPIO0_IN, 1 = ETH_CLOCK_GPIO0_OUT, 2 = ETH_CLOCK_GPIO16_OUT, 3 = ETH_CLOCK_GPIO17_OUT #define USE_SPS30 // [I2cDriver30] Enable Sensiron SPS30 particle sensor (I2C address 0x69) (+1.7 code)
Mit dem ESP-Flasher-Windows-x64.exe habe ich dann die erzeugte Tasmota32.bin auf den WT32-Eth01 flashen können.
Hier die Firmwaredatei: tasmota32.bin
Dann habe ich den SPS30 angeschlossen:
Der WT32 war nun im Netzwerk vorhanden, unter 192.168.1.69
Folgendes habe ich eingestellt:
Das muss da rein:{"NAME":"WT32_ETH01","GPIO":[1,1,1,1,1,1,0,0,1,0,1,1,3840,576,5600,0,0,0,0,5568,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,1],"FLAG":0,"BASE":1}
Hier bitte aufpassen!!! "Also, if using Ethernet, I2C works only with:
IO32 (marked on the board as CFG, “pin 2” according to page 9 ) configured as SCL;
IO33 (marked on the board as 485_EN, “pin 3” ibid.) configured as SDA."Hier habe ich das wifi deaktiviert
Meine Einstellungsdatei: Config_tasmota_AB0F20_3872_13.3.0.dmp
Das Ergebnis:
Dann die Einrichtung in ioBroker:
Unter Adapter einen weiteren MQTT-Adapter installiert.
Vielen Dank an alle, die hier eine super Vorarbeit geleistet haben!!!!
Als nächstes werde ich den Sensor außen an der Hauswand montieren und in NodeRed die Bedingungen für das Abschalten der Lüftungsanlage festlegen.....
#Keine Ahnung, wie ich diesen Info-Kasten unten los werde - muss sich irgendwie über einen obigen link generieren#
-
@Homoran Guten Morgen, kann man den Titel irgendwie ändern?
Mit dem SDS011 und USB zu LAN, hat das nicht mehr viel zu tun.VG
-
@herrfrodo sagte in Wie SDS011 Staubsensor mit USB zu LAN im IOBroker einbinden?:
kann man den Titel irgendwie ändern?
Startpost editieren und Titel ändern
-
@homoran Danke!
-
Nachtrag:
Ich habe nun in IOBroker den MQTT-Adapter deaktiviert und den Sonoff-Adapter mit folgenden Einstellungen installiert:
Damit habe ich die Werte direkt richtig in den Objekten!
@Codierknecht Besten Dank für den Tipp!!! -
@herrfrodo Wenn man die beiden Adapter auf verschiedenen Ports laufen lässt, kooperieren die sehr gut ...
Es soll durchaus MQTT Devices geben, bei denen der Sonoff Adapter nicht funktioniert, oder zumindest nicht alle vorhandenen Werte aus dem Gerät extrahiert ...
-
@martinp sagte in Wie SDS011 / SPS30 Staubsensor mit I2C über LAN zu IOBroker?:
Es soll durchaus MQTT Devices geben, bei denen der Sonoff Adapter nicht funktioniert, oder zumindest nicht alle vorhandenen Werte aus dem Gerät extrahiert
Durchaus. z.B. mein ESP für den Wasserzähler.
Daher laufen auch bei mir beide Adapter.Für alles was mit Tasmota läuft ist aber der Sonoff die erste Wahl.
-
Kennt ihr ESPhome?
-
@herrfrodo sagte in Wie SDS011 / SPS30 Staubsensor mit I2C über LAN zu IOBroker?:
Kennt ihr ESPhome?
Dem Namen nach. Ansonsten: Nope!
-
Nachtrag:
Ich habe einen kleinen DC/DC Spannungswandler (DC IN 7-36V, OUT 5V 1,5A) direkt an die Pins gelötet und teilweise mit Heißkleber isoliert.
https://www.murata.com/en-eu/products/productdetail?partno=OKI-78SR-5%2F1.5-W36-C
2x "Pullup-Widerstände" - also normale Widerstände mit 10KOhm - einen mit Plus an SCL und den anderen mit Plus an SDA gelötet.
unten habe ich zuerst ein dickes doppelseitiges Klebeband geklebt und dann darauf Velcro.
In der Dose (die mir zu klein ist - größere kommt heute) habe ich den SPS30 auch mit Velcro am Dosengrund befestigt. Zudem habe ich noch 2 LAN POE-Injektoren gefunden und verbaut.
Ich speise nun 12V ein (der DC/DC Wadler kann 7-36V ab, eventuell nehme ich noch ein Netzteil mit 24V, da die Leitungslänge ca. 12m sein wird. Der gemessene Strom bei 5V war zwischen 0,15A und 0,3A. Das sind ca. 1,5W
WT32-ETH01:
SPS30:
Wenn ich das richtig sehe, dann müsste man von 0,58A (ca. 3W bei 5V) fürs Maximum ausgehen.LAN-Leitungslänge ca. 12m
Hiermit berechnet: https://www.wirsindheller.de/spannungsabfall-kabellaenge.3829.html#wshberechnungBei 5V:
Bei 12V:
Bei 24V:
Immer vom Maximum ausgehend und der Verlustleistung des Spannungswandlers, sind 12V meiner Meinung nach grenzwertig, allerdings liegt der gemessene Strom deutlich unter den Verbrauchsangaben (die Reinigungsprozedur des SPS30 habe ich nicht gemessen)
Wenn ich noch ein 24V (oder höher) Netzteil habe, dann nehme ich das.
Da fällt mir ein, dass ich an der PV-Batterie noch einen bisher ungenutzten 24V DC/DC Spannungswandler angeschlossen habe.....
Das lässt sich noch bis 28V hochdrehen
Kabellänge in Meter: 12,00
Leistung in Watt: 3,00
Querschnitt in mm²: 0,25
Eingangsspannung in Volt: 28,00
Elektrische Leitfähigkeit: 56,00
Widerstand Ω: 0,0178
Temperatur ℃: 20°CBerechnung
Spannungsabfall: 0,66%
Ausgangsspannung in Volt: 27,82
Leitungswiderstand Ω: 0.8544 -
Nachtrag 04.03.2024
Übrigens werden bei POE-Einspeisung immer die Adernpaare 1 und 4 genommen.
Quelle: https://www.kabelscheune.de/Netzwerkstecker-RJ45-Belegung-nach-EIA-TIA-Farbcode/
Bei T568A
PIN 1: weiß / grün (Paar 3)
PIN 2: grün (Paar 3)
PIN 3: weiß / orange (Paar 2)
PIN 4: blau (Paar 1)
PIN 5: weiß / blau (Paar 1)
PIN 6: orange (Paar 2)
PIN 7: weiß / braun (Paar 4)
PIN 8: braun (Paar 4)Bei T568B
PIN 1: weiß / orange (Paar 2)
PIN 2: orange (Paar 2)
PIN 3: weiß / grün (Paar 3)
PIN 4: blau (Paar 1)
PIN 5: weiß / blau (Paar 1)
PIN 6: grün (Paar 3)
PIN 7: weiß / braun (Paar 4)
PIN 8: braun (Paar 4)Diese Stecker: https://www.amazon.de/dp/B098XW9XQL?ref=ppx_yo2ov_dt_b_product_details&th=1
an dieses Kabel: https://www.amazon.de/dp/B0716R9N5H?ref=ppx_yo2ov_dt_b_product_details&th=1 -
Ich habe dieses kleine Blockly angefertigt:
Hier der Code:<xml xmlns="https://developers.google.com/blockly/xml"> <block type="on_ext" id="y/Kj+@nuqDDajWv8d[LM" x="-763" y="-1812"> <mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation> <field name="CONDITION">ne</field> <field name="ACK_CONDITION"></field> <value name="OID0"> <shadow type="field_oid" id="3FsVh}:{;,]-jhS1VF(6"> <field name="oid">sonoff.0.SPS30 Feinstaubsensor.SENSOR.SPS30.PM10</field> </shadow> </value> <statement name="STATEMENT"> <block type="controls_if" id="!i+EGcL4yWV~N87ricAT"> <mutation elseif="1"></mutation> <value name="IF0"> <block type="logic_operation" id="`A-TtiYACPIxQI}A8L]9"> <field name="OP">AND</field> <value name="A"> <block type="logic_compare" id="hld^OxU5I#C7bn3V;#HT"> <field name="OP">EQ</field> <value name="A"> <block type="get_value_var" id="yJP@T-Dx_/XkOfN?ig89"> <field name="ATTR">val</field> <value name="OID"> <shadow type="field_oid" id="B)X;2-R]2(;=_u]@h`;v"> <field name="oid">0_userdata.0.Feinstaub.VAR_Lüftung-wegen-Staub-0-1</field> </shadow> </value> </block> </value> <value name="B"> <block type="math_number" id="M2,l@Xy$7(J|TIg).3Ii"> <field name="NUM">1</field> </block> </value> </block> </value> <value name="B"> <block type="logic_compare" id="/DSH4FzH^zx||Mtu{Dgd"> <field name="OP">GT</field> <value name="A"> <block type="get_value" id="w*rbOn3YC9}jC9(g|s49"> <field name="ATTR">val</field> <field name="OID">sonoff.0.SPS30 Feinstaubsensor.SENSOR.SPS30.PM10</field> </block> </value> <value name="B"> <block type="get_value" id="bz:miwR;T3d{JJEVSd0]"> <field name="ATTR">val</field> <field name="OID">0_userdata.0.Feinstaub.Lüftung_Staub-Schwelle_AUS</field> </block> </value> </block> </value> </block> </value> <statement name="DO0"> <block type="control_ex" id="*1g.ViJ/HnbqFTj}2`Zl"> <field name="TYPE">false</field> <field name="CLEAR_RUNNING">TRUE</field> <value name="OID"> <shadow type="field_oid" id="RwR0cLO.O|PSzOJlp#4b"> <field name="oid">hm-rpc.0.LEQ0539002.1.STATE</field> </shadow> </value> <value name="VALUE"> <shadow type="logic_boolean" id="8Hf2z4`G8]5}zo_^O.)G"> <field name="BOOL">FALSE</field> </shadow> </value> <value name="DELAY_MS"> <shadow type="math_number" id="k$^ckeL9ed*ry{3E.A#t"> <field name="NUM">0</field> </shadow> </value> <next> <block type="control_ex" id="V7PLAR,U%mgiuv/s1=4Y"> <field name="TYPE">true</field> <field name="CLEAR_RUNNING">TRUE</field> <value name="OID"> <shadow type="field_oid" id="_-^[KPCml};k4f4EdB:]"> <field name="oid">0_userdata.0.Feinstaub.VAR_Lüftung-wegen-Staub-0-1</field> </shadow> </value> <value name="VALUE"> <shadow type="logic_boolean" id="d5,8dy,1|xkUz*nAP:bi"> <field name="BOOL">FALSE</field> </shadow> <block type="math_number" id="i@#(,B$DR1LK!gn:$8_@"> <field name="NUM">0</field> </block> </value> <value name="DELAY_MS"> <shadow type="math_number" id="Gsi4-@,LdScZ=uUL_`,,"> <field name="NUM">0</field> </shadow> </value> <next> <block type="debug" id=";JXq,_ii:$Ir.T$ROruj"> <field name="Severity">log</field> <value name="TEXT"> <shadow type="text" id="O{pzwwGMk17Pd?S_%%U+"> <field name="TEXT">LÜFTUNG AUS wegen hohem Feinstaubwert</field> </shadow> </value> <next> <block type="signal-cmb" id="le{;(r?GDOPss4E{i0/="> <field name="INSTANCE">.0</field> <field name="LOG">log</field> <value name="MESSAGE"> <shadow type="text" id="srV/+K]pg]a8;Iswvw)O"> <field name="TEXT">LÜFTUNG AUS wegen hohem Feinstaubwert</field> </shadow> </value> </block> </next> </block> </next> </block> </next> </block> </statement> <value name="IF1"> <block type="logic_operation" id="R|+cCsn9_Zr$a55.;},X"> <field name="OP">AND</field> <value name="A"> <block type="logic_compare" id="M=C)eQ`K/94w5qgV[xk%"> <field name="OP">EQ</field> <value name="A"> <block type="get_value_var" id=":AZO!+EKLhC)-rg!g.W^"> <field name="ATTR">val</field> <value name="OID"> <shadow type="field_oid" id="f?O)}RzYO``m05/0N=1l"> <field name="oid">0_userdata.0.Feinstaub.VAR_Lüftung-wegen-Staub-0-1</field> </shadow> </value> </block> </value> <value name="B"> <block type="math_number" id="?BJ1;1Ik^EZX/QSzxIv2"> <field name="NUM">0</field> </block> </value> </block> </value> <value name="B"> <block type="logic_compare" id="Ss~gJ+2JrLs#LxyASuWr"> <field name="OP">LT</field> <value name="A"> <block type="get_value" id="Io9m#vdM/~$ZZ|wy1nS="> <field name="ATTR">val</field> <field name="OID">sonoff.0.SPS30 Feinstaubsensor.SENSOR.SPS30.PM10</field> </block> </value> <value name="B"> <block type="get_value" id="Je/6HhqT=_ST9fbE._[$"> <field name="ATTR">val</field> <field name="OID">0_userdata.0.Feinstaub.Lüftung_Staub-Schwelle_AUS</field> </block> </value> </block> </value> </block> </value> <statement name="DO1"> <block type="control_ex" id="QG8k/m.pnX1HLE5:-l.0"> <field name="TYPE">false</field> <field name="CLEAR_RUNNING">TRUE</field> <value name="OID"> <shadow type="field_oid" id="@Bmh-R[_+~xXu6E0J79O"> <field name="oid">hm-rpc.0.LEQ0539002.1.STATE</field> </shadow> </value> <value name="VALUE"> <shadow type="logic_boolean" id="B5K#:PAeja0H7rzx`$al"> <field name="BOOL">TRUE</field> </shadow> </value> <value name="DELAY_MS"> <shadow type="math_number" id="BB8%ft}o)qn-=n!4}HW^"> <field name="NUM">0</field> </shadow> </value> <next> <block type="control_ex" id="t/|RC;8=}EWk90V^mDBW"> <field name="TYPE">true</field> <field name="CLEAR_RUNNING">TRUE</field> <value name="OID"> <shadow type="field_oid" id="sOQ5A,bEVDF[wJgNSywu"> <field name="oid">0_userdata.0.Feinstaub.VAR_Lüftung-wegen-Staub-0-1</field> </shadow> </value> <value name="VALUE"> <shadow type="logic_boolean" id="e1AvIBrVfz;|eFZSUTmr"> <field name="BOOL">TRUE</field> </shadow> <block type="math_number" id="a5mp/5|1+eV_/vc7fz/A"> <field name="NUM">1</field> </block> </value> <value name="DELAY_MS"> <shadow type="math_number" id="hpV|sa-Tbg.-|BGjt.9r"> <field name="NUM">0</field> </shadow> </value> <next> <block type="debug" id="4YT1IG_#U-nP*FSiQG=W"> <field name="Severity">log</field> <value name="TEXT"> <shadow type="text" id="lWxqU_=@?,;8Mh`kpmQH"> <field name="TEXT">LÜFTUNG EIN nach besserem Feinstaubwert</field> </shadow> </value> <next> <block type="signal-cmb" id="%rqUa~y;{CoHNRoQppU9"> <field name="INSTANCE">.0</field> <field name="LOG">log</field> <value name="MESSAGE"> <shadow type="text" id="d@sFBEOTVqLA[aS7hI[`"> <field name="TEXT">LÜFTUNG EIN nach besserem Feinstaubwert</field> </shadow> </value> </block> </next> </block> </next> </block> </next> </block> </statement> </block> </statement> </block> </xml>
Kennt sich da jemand aus? Ist das so OK?
Funktionieren tut es, aber vielleicht geht es anders besser.... -
Kurz zur Info,
läuft auch per USR-TCP-232-302 und Tasmota Scripting,
Sensordata -> ESP Speicher -> ESP Ausgang TX -> Serial to Lan -> NodeRed -> Datenpunkt
Damit können dann alle Sensorenwerte die in Tasmota laufen per Lan gesendet werden.
Läuft auch -
Kurz zur Info,
der kleine Bruder USR-TCP232-T2 läuft, dieser ist direkt mit TTL zu verbinden.
Der USR-TCP-232-302 braucht einen Adapter von TTL auf RS232
Der E-Byte E801 ( TCP ) braucht auch einen Adapter von TTL auf RS232
WT32-ETH0 geht auchZiel erreicht, bin Weg ------------------------------------->
Testscript für Tasmota Scripting DHT11, Data Send an TX alle 5 sec
>D temp=0 hum=0 tau=0 >B so(3 1 9600 8N1 1024) >T temp=DHT11#Temperature hum=DHT11#Humidity tau=DHT11#Dewpoint >S if upsecs%5==0 then =>SerialSend2 {"Temperature":%temp%,"Humidity":%hum%,"Dewpoint":%tau%,},\n print ---- SEND STR NUM ---- %temp% endif >W Temperature {m} %temp% Feuchtidkeit {m} %hum% Taupunkt {m} %tau% #
-
@ralla66 said in Wie SDS011 / SPS30 Staubsensor mit I2C über LAN zu IOBroker?:
USR-TCP232-T2
Irgendwie check ich das mit der eMail-Benachrichtigung bei neuen Posts hier nicht.....
Vielen Dank für Deine Hilfe und Tests!
Was kann man nun zusammenfassen schreiben?
Man braucht in jedem Fall einen ESP dafür, egal ob USR-TCP-232-302 oder USR-TCP232-T2, wobei der USR-TCP232-T2 deutlich günstiger ist.
In jedem Fall braucht man mindestens einen ESP8266 (ca. 10€)
USR-TCP-232-302 kostet ca. 34€ plus Adapter!
USR-TCP232-T2 kostet ca. 19€
WT32-Eth01 kostet ca. 20€ plus USB zu UART Adapter ca. 6-8€
Die deutlich bessere Performance des WT32 wird nie ausgenutzt und der Stromverbrauch ist viel höher als beim ESP8266.Was mich allerdings im täglichen Gebrauch stört ist die Tatsache, dass unter Tasmota der Sensorwert nur alle 10 Sekunden aktualisiert wird....dadurch habe ich bis zu 10 Sekunden lang den Kaminmief von den Nachbarn im Haus.....daher überlege ich an einen Testaufbau mit ESPHome.....
Testscript für Tasmota Scripting DHT11, Data Send an TX alle 5 sec
Wie schaffst Du die 5 sec?