Änderung von Integer zu Float

Hallo Leute,

ich habe eine Füllstandmesser der mit den Wert als Integer ausgibt … ich bräuchte den aber in Float für die Schaltuhr

Wie kann ich das ändern oder welches schritte muss ich machen damit ich diesen wert in Float bekomme?

Danke für eure Hilfe

LG
Christian

Z. B. PHP: floatval - Manual

Hallo,
mag mir mal bitte jemand auf die Sprünge helfen?
Ich möchte eine Variable aus einer Logo, welche ein Integer ist, in eine Variable für die Homematic schreiben.
Leider scheitere ich an meinen PHP Kenntnissen. Folgendes Skript will bei mir nicht funktionieren:

<?php

$value = GetValueInteger(27225); 
HM_WriteValueInteger2(32316 /*[HomeMatic Systemvariablen]*/,'17549', $value);

?>

Als Meldung erhalte ich:
Notice: Wrong Datatype for 20356. in /var/lib/symcon/modules/.store/de.nall.chan.homematic.extended/Systemvariablen/module.php on line 392

Im Grunde erwartet die HM ein Float und kein Integer. Ich weiß aber nicht, welche systemvariable ich bei HM einstellen müsste.

VG
Marc

Moin Marc,

so sollte es gehen.

<?php
$value = floatval(GetValueInteger(27225)); 
HM_WriteValueFloat2(32316 /*[HomeMatic Systemvariablen]*/,'17549', $value);
?>

Gruß
Hans

Hallo Hans,

es funktioniert. Vielen Dank.
Jetzt muss ich mir das mal in Ruhe anschauen, wo da die Logik ist. Mir fällt es leichter eine Herleitung zu bekommen, wenn ich ein funktionierendes Beispiel habe. Dafür mache ich zu wenig mit PHP.

Schönen Restsonntag und nochmals Danke
Gruß
Marc

Du hast einfach den falschen Befehl für eine Float Systemvariable in der CCU benutzt.
Mit HM_WriteValueInteger2 auf eine Float Variable in der CCU schreiben, bringt diesen Fehler.
Unabhängig vom eigentlichen Wert.

Ich empfehle inzwischen anstatt der HM_* Befehle lieber RequestAction zu benutzen.


<?php

$value = GetValueInteger(27225); 

RequestAction (ID der Variable, $value);

Du kannst das auch ganz ohne Script lösen.
In der Konsole beim Ereignis der Änderung von 27225 direkt sagen ‚Variable auf Wert‘ schalten.
Michael

Ok.
Ich habe das Prinzip verstanden. Es sollte ja ein Wandel von Integer auf Float stattfinden, nachdem ich gesehen habe, dass die HM mit dem Integer nichts anfangen kann.
Mit „floatval“ gebe ich den Befehl die folgende Variable in ein „Float“ zu Wandeln.
Mit GetValueInteger hole ich dann natürlich den Integer aus der Logo.
Richtig?

RequestAction habe ich jetzt noch nicht gehört und gesehen. Da muss ich mal in Ruhe recherchieren. Nur, warum ist das besser? Da wäre ich um eine Antwort dankbar.

Gruß
Marc

Leider fast alles falsch.

[ol]
[li]Ein Integer muss nie zu Float gewandelt werden, da Fließkommazahlen (float) immer auch Ganzzahlen (integer) beinhalten.
[/li][li]floatval ist somit unnötig
[/li][li]Mit GelValueInteger holst du kein Wert aus der Logo.
[/li][li]Mit GetValueInteger holst du den Wert einer IPS-Variable in ein Script.
[/li][/ol]

Weil ich die HM_WriteValue*2 Befehle aus meinen Modul entfernen werde, sie sind inzwischen unnötig.

Und das hier, war mit dem Ereignis gemeint:
Als ‚auslösende Variable‘ 27225 auswählen.
Als Ziel-Aktion die Variable der CCU-Systemvariable
Als Aktionstyp ‚Schalte Variable‘
Als Aktion ‚Auf auslösenden Wert schalten‘

Michael

Weil ich die HM_WriteValue*2 Befehle aus meinen Modul entfernen werde, sie sind inzwischen unnötig.
:eek:
Jetzt, wo alles so schön funktioniert. :wink:

@Nall-chan
Ich habe das mit dem Ereignis mal probiert. Ich kann als Aktionstyp aber nur „Führe Aktion abhängig vom Ziel aus“ oder „Führe PHP Code aus“ auswählen, jedoch nicht „Schalte Variable“


Und was ist der Unterschied zu „Auf auslösenden Wert setzen“ und „Auf auslösenden Wert schalten“?

Sollte aber so korrekt sein. Du nutzt die Webconsole?
Eventuell ist das aktuell nur in der Pro Konsole verfügbar:
https://www.symcon.de/downloads/

Eigentlich doch klar :smiley: :wink:
Schalten - ist immer Gerät schalten / Gerät ansteuern / Gas treten
Setzen - ist Variable auf Wert setzen (also nicht schalten, sondern SetValue, Tachonadel mit der Hand bewegen :wink: )
Michael

Gute Erklärung! :stuck_out_tongue:
Ich habe das jetzt mal mit der Pro-Konsole versucht. Auch da habe ich den gleichen Effekt. Das muss also noch etwas anderes sein.
Zunächst scheint es mit dem Skript zu funktionieren. Das bringt mich schon etwas weiter in meinem Projekt. Blöd nur, wenn ich dann doch alles später wieder umstellen muss.

Funktioniert auf auslösenden Wert schalten nicht?
Michael

Nein, leider nicht. Ich erhalte den Wert 0.

Du bist mit deinem IP-Symcon nicht auf der aktuellen Version. Hier wurde die Darstellung leicht aktualisiert. Funktional ist allerdings „Führe Aktion abhängig vom Ziel aus“ analog zu „Schalte Variable“. Das sollte eigentlich auch alles so funktionieren. Kannst du den Schaltvorgang denn ohne Ereignis, also einfach im WebFront, fehlerfrei durchführen? Vielleicht ist die 0 ja ein Fallback-Wert vom Gerät/Modul, wenn etwas nicht funktioniert oder dergleichen?

Die Verwaltungskonsole ist aktuell, die habe ich erst gestern installiert. IPSymcon selbst ist eine Ubuntu-Version, da muss ich mal schauen, dass ich die aktualisiere. Anleitung dazu hatte ich schon gefunden.
Wenn ich das o.g. Skript verwende, dannerhalte ich die Werte aus der Logo für die HM. Fallback schließe ich bei HM-Variablen aus, wenn die nicht weiter im Programm der HM bearbeitet werden. Derzeit ist mein Ziel die Analogwerte aus der Siemens Logo in die HM zu bekommen.
Gruß
Marc

Hallo zusammen,

ich habe soeben alles aktualisiert. IPS ist auf Version 5.4. Nun bekomme ich auch die Ereignis-Einstellung so angezeigt, wie im Screenshot von @Nall-chan.
Leider ändert das aber immer noch nichts an meinem Problem. Wie schon geschrieben, funktioniert das Skript von @PC Oldie, aber das mit dem Ausgelöstem Ereignis nicht.
Ich wäre mit dem Skript schon zufrieden. Aber die Androhung :wink: von @Nall-chan die HM_WriteValue*2 Befehle aus seinen Modul zu entfernen, bereitet mir Kopfschmerzen.

Viele Grüße
Marc

Du musst aber mehr Infos liefern. So kann dir keiner helfen.
Screenshot vom Ereignis und Objektbaum mit den betreffenden Variablen wäre gut.
Und dann bitte in der Homematic Systemvariable Instanz auf Debug gehen und den Inhalt postens, nachdem das Ereignis einmal ausgelöst hat.
Vielleicht ist da wirklich noch ein Bug im Modul.
Michael

Also was mir gerade aufgefallen ist, wenn ich in der Instanzkonfiguration die Variable schalte, dann bleibt der eingestellte Wert auch erhalten. Hier noch die Screenshots. Das mit dem Debug überfordert mich gerade, weil ich das noch nicht gemacht habe.

Hier habe ich den Wert, der beharrlich auf 0 stand, auf 1 gesetzt.

Noch etwas. Das Ereignis aktualisiert sich auch regelmäßig, also die Auslösung erfolgt somit.