neue PHP-Module als Ersatz meiner Delphi-Module

Schade, denn muss ich wohl versuchen eins der alten Scripte zum laufen zu bringen.

Da die Module für mich noch nicht verständlich sind, ich bin froh das ich überhaupt etwas PHP verstehe.

Kann man im Modul nicht einfach eine Funktion einfügen, wo man die Variablen auswählen kann die man haben möchte?:slight_smile:

Trotzdem Vielen Dank für das Modul.

Hein09

Ich habe gerade ein Update für 4.1 hochgeladen, wo nun auch die Batteriespannung von NUT und APCUPSD mit angezeigt wird. Wenn Du Dir den Diff von diesem Commit im Github ansiehst, wirst Du es verstehen.

Eine Auswahlliste ist mir wieder zu kompliziert.

Tommi

Sind denn die NUT und APCUPSD Module gleich welche Werte da gestellt werden?

Was ist wenn ich es schaffe zusätzliche Werte einzupflegen, kann ich denn das Modul noch updaten ohne das meine Änderungen weg sind?

Hein09

Das NUT und APCUPSD Modul sind weitestgehend funktional identisch, weil als Copy/Paste entstanden :smiley: Ich bemühe mich, das auch so zu halten, wenn es geht.

Das Einpflegen Deiner Änderungen macht das Git alles für Dich mit wenigen Befehlen.
Du kannst Dir z.B. Dein eigenes Repository aus einem Fork oder auch nur einen eigenen Branch erstellen. Das stellst Du im IPS als Repository ein. Dann kannst Du Änderungen von meinem Repository mergen.

Du kannst mir auch einen PR mit Deinen Anpassungen schicken. Dann schaue ich es mir an, ob ich es in das Standard-Repository übernehme.

Tommi

Hallo Tommi,
kann man über deine Module in Verbindung mit einem CUL auch FS20 Aktoren anlernen?

Gruß
Schuggi

gute Frage, habe ich selbst nicht gemacht. Hat in den letzten 5 Jahren bisher auch noch keiner gebraucht

Normalerweise wird das benötigte Switchgerät erst definiert, wenn ein vom CUL empfangener Befehl den Hauscode und den Status liefert. Erst dann kann man eine Action von IPS im Testcenter auslösen, die man zum Konfigurieren nutzen kann. Das SwitchDevice manuell anzulegen ist etwas haarig, da die sonst automatisch angelegten Verknüpfungen über die Properties hergestellt werden müssen.

Evtl. baue ich mal eine Funktion in den Splitter ein.

Tommi

Ich hab halt noch ein paar FS20 Aktoren rumliegen die ich mal unter FHem verwendet hatte.
Eine FS20-Zentrale oder einen Sender habe ich nicht.

Gruß
Schuggi

Ich habe jetzt in 4.1 die Parse Funktion Public gemacht, so das man den Eingang eines CUL-Datenpakets simulieren und was damit die Erstellung einer Geräteinstance auslösen kann. Wenn man nun im Testcenter den Action Button nutzt, sollte der CUL einen Befehl mit den dort hinterlegten Geräteadressen senden, der zum Konfigurieren des physischen Gerätes nutzbar sein sollte.


/* Aufbau Paket gemäß CULFW Doku
FHHHHAACCTTSS
0123456789012
HHHH Homecode (CUL Hex Format
AA Address (CUL Hex Format )
CC FS20Actioncode z.B. "00" =aus 
TT Timer code: (nur bei einem Dimcode erforderlich)
SS Signal (zum Anlegen mit beliebigen Wert nötig)
*/
$id_splitter=12345; //anpassen
$paket="F4880011114"; // (HC 21313111 Addr 1112 Action "11"=On, Signal "14"=-64db 
CUL_Parse($id_splitter,$paket);

Zum „Übersetzen“ der Adressen in die CUL Hex Syntax kannst Du die FHZhelper:four2hex Methode verwenden

$Device_code="213131111112";
$fs20code="11";
$signal="14";
$culaddr.=FHZ_helper::four2hex(substr($Device_code,0,8)); //hc
$culaddr.=FHZ_helper::four2hex(substr($Device_code,8,4)); //sub
$culcode = 'F' . $culaddr . $fs20code . $signal;

HTH
Tommi

Hallo Tommi,
danke für die schnelle Abhilfe.
Wollte das gleich mal testen, kann die 4.1 aber nicht finden.
Ist die Version schon online?

Gruß
Schuggi

ja sicher. Du musst auch den 4.1 Branch auswählen (und IPS 4.1 installiert haben)

Bei 4.0 kannst Du die Änderung testweise auch selber einpflegen: in CUL/module.php ersetzen

private function Parse($line)

gegen

public function Parse($line)

und IPS neu starten.

Tommi

Funktioniert! :smiley:
Vielen Danke
Schuggi

Hallo Tommi,
gerade ist mir noch aufgefallen, das man bei deinen Instanzen bei „Befehl testen“ keine Parameter eingeben kann.

Parameter_.png

Das Problem sehe ich beim CUL-Splitter und bei den FS20-Devices.

Schuggi

Schau mal nach ob in der public Function der Variablentyp ausgewiesen ist ansonsten zeigt dort IP-Symcon nichts an.
Siehe
Für einen absoluten Anfänger :slight_smile: Schaltung bei Zeit
Gegebenenfalls muss das halt noch ergänzt werden.

Nein, sind keine Typen ausgewiesen.
Vieleicht kann das Tommi ja mal ändern.

Schuggi

Gut, jetzt weiß ich auch, wozu die Type Hints gut sein sollen. Die „Befehl testen“ Funktion habe ich bisher in 11Jahren IPS noch nie genutzt. Man hätte ja auch ein einfaches Eingabefeld zur Verfügung stellen können, wenn keine Type Hints vorhanden sind.

Mit diesen Hints hatte ich auch schon mal Ärger, weil dann was anderes nicht funktioniert hat. Außerdem schreit meine IDE, weil Scalar Type Hints erst offiziell mit PHP7 verfügbar sind, hier aber noch PHP5 eingesetzt wird.

Schon doof so.

Tommi

Eigentlich sollte das ab 5.4 gehen. Was nutzt Du denn zum Editieren?

Ereignisse greifen da aber auch drauf zurück nicht nur die Funktion Befehl testen. Ansonsten muss man jedesmal mit Skripten und einem Ereignis rumbasteln, weil es mit Ereignissen alleine dann auch nicht geht den Befehl in IP-Symcon zuzuweisen.

Es soll ja nicht die Variable deklariert werden nur in einer public funktion soll der Type zugewiesen werden
also z.B. einfach


public function SetDuration($duration)

in


public function SetDuration(integer $duration)

ändern und schon geht es auch mit Wert den Befehl testen und auch im Ereignis den Wert in IP-Symcon zuzuweisen.

Ich verstehe schon, das es innerhalb von IPS so funktioniert.

Das Ist aber in PHP5.6 noch keine offizielle Funktion, sondern von Paresy schon mal vorab in seinem privaten IPS PHP implementiert worden. Scalar Type Hints gibt es offiziell erst ab PHP7.0 siehe PHP: New features - Manual.

Als IDE verwende ich IntelliJ mit dem Webstorm PHP Plugin. Die gibt mir ein fettes rotes Ausrufungszeichen und lässt mich nur unter Protest einchecken. Und PHP7 Kompatibilität kann ich noch nicht einstellen.

Tommi

Hm da müsste dann paresy mal dazu was schreiben. Es scheint ja auch so das PHP 7 dann wieder etwas anderes erwartet als jetzt, int statt integer, muss man dann in Zukunft wieder alles abändern oder geht dann beides?