FHEM Forum

FHEM - Entwicklung => FHEM Development => Thema gestartet von: betateilchen am 11 Oktober 2015, 22:30:03

Titel: Ich brauche bitte einen Schubs in die richtige Richtung
Beitrag von: betateilchen am 11 Oktober 2015, 22:30:03
Hallo Entwicklerkollegen,

ich experimentiere grade mit Blocking.pm und stehe vor einer Aufgabe, zu der ich seit zwei Stunden keine Lösung finde.


Bestimmt sehe ich einfach mal wieder vor lauter Bäumen den Wald nicht :(

Titel: Antw:Ich brauche bitte einen Schubs in die richtige Richtung
Beitrag von: hexenmeister am 11 Oktober 2015, 22:34:28
Hash aul Return-Wert dürfte das Problem sein. Die Rückgabe wird doch serialisiert, also muss das ein String sein. Im SYSMON habe ich genau so gemacht, alles mit einem Trennzeichen in ein String und dann in finishFn wieder auseinandernhmen.
Titel: Antw:Ich brauche bitte einen Schubs in die richtige Richtung
Beitrag von: betateilchen am 11 Oktober 2015, 22:35:56
Die Idee hatte ich auch schon. Aber irgendwie habe ich das Bauchgefühl, dass das auch einfacher gehen muss. Bestimmt irgendwie über Referenzen oder so, aber damit stehe ich auf Kriegsfuß.
Titel: Antw:Ich brauche bitte einen Schubs in die richtige Richtung
Beitrag von: hexenmeister am 11 Oktober 2015, 22:46:22
Sag Bescheid, wenn Du eine bessere Idee findest. Glaube aber eher nicht daran, da zwischen zwei getrennten Prozessen keine Referenzen funktionieren werden (ok, theoretisch wäre SharedMemory & Co. schon denkbar).
Titel: Antw:Ich brauche bitte einen Schubs in die richtige Richtung
Beitrag von: justme1968 am 11 Oktober 2015, 23:03:44
es geht leider nicht wirklich einfacher. die rückgabe muss ein einzeiliger string sein. d.h. er darf keine zeilenumbrüche enthalten. die einschränkung kommt daher das die rückgabe durch telnet muss.

wenn du nicht selber serialisieren willst funktioniert es mit encode_json gut. auf der anderen seite dann mit decode_json wieder auspacken.

wichtig ist das du nich den namen des devices das BlockingCall aufgerufen hat aus  $funktionsName wieder mit zurück an $finishFn zurück gibst. das geht nicht automatisch.

statt Blocking.pm kannst du dir auch SubProcess.pm anschauen. da die kommunikation hier per direkt per socket erfolgt fällt die einschränkung mit den zeilenumbrücken weg und du musst auch keinen device namen zurück geben. serialisieren musst du aber immer noch.
Titel: Antw:Ich brauche bitte einen Schubs in die richtige Richtung
Beitrag von: betateilchen am 12 Oktober 2015, 00:30:26
Danke für die Erklärungen.

Habe mein "Problem" nun wie vorgeschlagen mit einem ziemlich langen String als Rückgabewert gelöst.