Variablen werte zuweisen ???

Begonnen von yogi74, 06 Januar 2017, 19:56:06

Vorheriges Thema - Nächstes Thema

yogi74

Hallo zusammen,

bin momentan leider am ende meines Lateins angekommen.
Ich möchte, wie schon einige vor mir, Werte zu und von einer Wago Steuerung in Fhem verarbeiten.
Die Modbus Verbindung habe ich soweit am laufen (über ModbusTCPserver), das heisst ich kann Werte setzen und diese kommen auch in der Wago an.
Dies funktioniert momentan aber nur wenn ich z.b. per "SET wagowert 1234" diesen Wert manuell setze. Ich möchte aber Werte aus anderen Modulen permanent über die Schnittstelle übertragen, z.b. vom Kostalpiko Modul, etc.

Meine Frage ist nun wie kann ich Messwerte (Readings) von anderen Modulen wie z.b. Temperaturen, Leistung, etc. meiner Variablen/device "wagowert" zuweisen. Und diese dann z.b. alle 30s aktualisieren.

Habe schon alles möglich versucht was ich aus der Hilfe/Doku/Forum entnehmen konnte. Da gibt es ja eigentlich schon einen passenden Thread dazu . https://forum.fhem.de/index.php/topic,12655.0.htm .Leider passt das alles noch nicht so auf meine Anwendung, bzw. hab es nicht ans laufen bekommen.

Ich bin sicher da gibt es sehr wahrscheinlich ne ganz einfach Lösung, hab sie leider noch nicht gefunden.

Danke




dev0


yogi74

#2
Hallo,

danke für die RM. Wollte meine Fragestellung nochmal präzisieren, falls das nicht klar geworden ist.

Habe folgenden Befehl versucht.

define sendtowago at +00:00:10 { my $val = readingsval("Kostal","Total.Energy",99);;\ fhem "set gesamt_kwh $val" }


Was dieser Befehl aus meiner Sicht machen sollte:
Aus dem Modul "Kostal" den Wert (Readings) "Total.Energy" auslesen. Diesen dann auf das Device/Variable "gesamt_kwh" schreiben, welche dann der ModbusTCP Server per Modbsuregister ausliest.
Das soll dann alle 10s passieren.

Wenn ich diesen Befehl ausführe bekomme ich das Timespec wizard  Fenster angezeigt, bei dem ich dann nicht weiss was ich tun soll, hab´s in der Doku noch nicht gefunden ?? Ansonsten passiert nichts.
Wie schon geschrieben funktioniert die Modbus Verbindung.D.h. wenn ich den Wert "gesamt_kwh" manuell setze wird dieser übertragen.

Es geht also nur darum den Wert aus einem Modul einem anderen Modul zu übergeben. Hier von KostalPiko zum ModusTCPServer.

Wenn ich den Befehl DOIF richtig verstehe ist es nur eine etwas bessere Version den AT Befehls und hilft mir jetzt nicht bei der Wert Zuweisung, oder?

Danke










CoolTux

Code für die DEF nicht für die CFG


define sendtowago at +00:00:10 { fhem "set gesamt_kwh " . ReadingsVal('Kostal','Total.Energy',99) }
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Puschel74

DOIF vereint notify und at und kann auch nur als notify oder at verwendet werden.

ZitatWas dieser Befehl aus meiner Sicht machen sollte:
Das ist schön aber - es fehlen Infos zu den Geräten die hinterlegt sind.
Ein list von Kostal fehlt, ein list des at fehlt ...

ZitatMeine Frage ist nun wie kann ich Messwerte (Readings) von anderen Modulen wie z.b. Temperaturen, Leistung, etc. meiner Variablen/device "wagowert" zuweisen. Und diese dann z.b. alle 30s aktualisieren.
Module generieren keine "Messwerte" - das machen die Geräte aka Devices.
Devices generieren Events je nachdem welche Werte gesendet werden - siehe EventMonitor.
Wenn ein Device einen Wert sendet wird in FHEM ein Event generiert - je nach Attribut (event-on-.* siehe commandref oder Wiki oder SuFu).
Auf diese Events kannst du in FHEM dann per notify/DOIF reagieren und entsprechend weiter verfahren - FHEM-Code oder Perl, je nachdem was dir eher liegt.
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

yogi74

Hallo,

vielen Dank @ cooltux, der Befehl tut jetzt was er soll, zumindest einmal. Bekomme nach den Ausführen wieder das Timespec wizard Fenster angezeigt. Was muss man hier machen ?  Wenn ich hier per SET auf active setze oder MODIFY klicke bekomme ich die Fehlermeldung "Please define sendtowago first" ?? Genau das mache ich doch mit dem Befehl ? Der AT wird auch nicht gespeichert und laut Eventmonitor auch nicht zyklisch ausgeführt.

Im Anhang noch das Listing,falls das das Richtige ist was gemeint war.

Danke

yogi74

OK, hab mir gerade nochmal was Wiki zu AT durchgelesen, geht so natürlich nicht periodisch.. D.h. soweit bin ich jetzt nen Schritt weiter was die Übergabe des Wertes angeht, Danke nochmal.