JSON -> Readings

Begonnen von dev0, 09 Februar 2017, 11:31:43

Vorheriges Thema - Nächstes Thema

SamNitro

Sorry für den Post:

Fehler selber gefunden
attr sonoff_s20 event-on-change-reading state.*,Set.*

in
attr sonoff_s20 event-on-change-reading .*

und schon geht es  :)
(Intel-Nuc Proxmox) (Homematic) (EnOcean) (CUL868) (CUL433) (Zigbee2MQTT) (ESP8266) (Echo) (DUOFERN)

AlexJ

#91
HI,

hab grad expandJSON gefunden, und wollte es aktivieren. Klappt aber nicht.
Habe vorhin JSON-2.94 in perl installiert, jedoch aktivieren von 98_expandJSON.pm geht nicht:

define ej3 expandJSON Sonoff.*:ENERGY.*:.{.*} (Power|Yesterday|Today)
Cannot load module expandJSON


Im log sehe ich noch:


2017.11.12 21:31:54 1: reload: Error:Modul 98_expandJSON deactivated:
Type of arg 1 to each must be hash (not array dereference) at ./FHEM/98_expandJSON.pm line 203, near "} ) "


Hab dann noch das expandJSON aus git probiert, jedoch kommt derselbe Fehler (nur an einer anderen Zeile):

2017.11.12 22:35:09 1: reload: Error:Modul 98_expandJSON deactivated:
Type of arg 1 to each must be hash (not array dereference) at ./FHEM/98_expandJSON.pm line 236, near "} ) "

2017.11.12 22:35:09 0: Type of arg 1 to each must be hash (not array dereference) at ./FHEM/98_expandJSON.pm line 236, near "} ) "


Die Zeile wo das Problem auftacht ist:
"while( my ($key,$value) = each @{ $ref } ) {"

Irgendeine Ahnung was Falsch ist?

PS: ich hab verschiedene define's probiert:
z.B. define ej3 expandJSON Sonoff.*:.*:.{.*}
aber auch ein reload 98_expandJSON bringt denselben Fehler

LG,
Alex

dev0

Welche Perl Version benutzt Du? Dazu in die FHEM Eingabezeile folgendes eingeben:

{$]}


Welches Betriebssystem?

AlexJ

Zitat von: dev0 am 13 November 2017, 05:33:39
Welche Perl Version benutzt Du? Dazu in die FHEM Eingabezeile folgendes eingeben:
{$]}
5.010000

Zitat von: dev0 am 13 November 2017, 05:33:39
Welches Betriebssystem?
Debian lenny 5.0, ist zwar uralt - läuft aber auf meinem LG N2R1 NAS

dev0

#94
Zitat5.010000
Perl 5.10 ist 10 Jahre alt...

Zitat
Die Zeile wo das Problem auftacht ist:
"while( my ($key,$value) = each @{ $ref } ) {"

Hier mal 2 Varianten, die Du stattdessen testen könntest...

while( my ($key,$value) = each @$ref ) {
while( my ($key,$value) = each 0..$#{ $ref } ) {


Edit: 1. Variante angepasst

AlexJ

Zitat von: dev0 am 13 November 2017, 09:40:02
while( my ($key,$value) = each @$ref ) {


2017.11.13 11:08:28 1: reload: Error:Modul 98_expandJSON deactivated:
Type of arg 1 to each must be hash (not array dereference) at ./FHEM/98_expandJSON.pm line 203, near "$ref ) "
2017.11.13 11:08:28 0: Type of arg 1 to each must be hash (not array dereference) at ./FHEM/98_expandJSON.pm line 203, near "$ref ) "





Zitat von: dev0 am 13 November 2017, 09:40:02
while( my ($key,$value) = each 0..$#{ $ref } ) {


2017.11.13 11:06:42 1: reload: Error:Modul 98_expandJSON deactivated:
Type of arg 1 to each must be hash (not constant item) at ./FHEM/98_expandJSON.pm line 203, near "0.."
2017.11.13 11:06:42 0: Type of arg 1 to each must be hash (not constant item) at ./FHEM/98_expandJSON.pm line 203, near "0.."

dev0

Dann habe ich spontan erst einmal keine Idee.
Ein Perlupdate ist unmöglich?

dev0

Versuch bitte noch einmal:

while( my ($key,$value) = each $ref) {
while( my ($key,$value) = each %{ $ref }) {


Ich kann es selbst im Moment nicht testen, ist eher geraten...

AlexJ

Zitat von: dev0 am 13 November 2017, 10:24:43
Versuch bitte noch einmal:

while( my ($key,$value) = each %{ $ref }) {


Mit %{ $ref} hab ich keine Fehler mehr: jetzt muss ich nur noch rausfinden ob es funzt :D (bin noch am lernen)

ich sehe jetzt:
DeviceOverview
ej3                 active

Internals
CFGFN
DEF                 Sonoff.*:.*:.{.*}
NAME               ej3
NOTIFYDEV      Sonoff.*
NR                   482
NTFY_ORDER    50-ej3
STATE              active
TYPE                expandJSON
s_regexp          Sonoff.*:.*:.{.*}
t_regexp          .*
version            1.10

Readings         
state               active         2017-11-13 11:30:21

dev0

ZitatMit %{ $ref} hab ich keine Fehler mehr
OK, ich schaue mir das bei Gelegenheit mal genauer an.

herrmannj

in alten und ganz neuen perl Versionen geht each nicht auf eine Referenz (Zwischendurch experimental).

https://perldoc.perl.org/functions/each.html
ZitatStarting with Perl 5.14, an experimental feature allowed each to take a scalar expression. This experiment has been deemed unsuccessful, and was removed as of Perl 5.24.

AlexJ

Zitat von: dev0 am 13 November 2017, 10:44:34
OK, ich schaue mir das bei Gelegenheit mal genauer an.

Danke nochmals an Dev0, es scheint zu laufen.

dev0

Zitat von: herrmannj am 13 November 2017, 11:30:35
in alten und ganz neuen perl Versionen geht each nicht auf eine Referenz (Zwischendurch experimental).
Danke für den Hinweis, ich hatte die Meldung falsch interpretiert. Ich glaube sogar, dass das ursprüngliche @{ $ref} an der Stelle nicht korrekt ist und nur durch den experimentellen Code nicht aufgefallen ist... Mal schauen, wann ich dazu komme, ab morgen wird es zeitlich für mich eng.

hanswerner1

Hallo,
ich habe 2 mqtt readings mit gleichen Namen:

tempbed {"actual": 75.6, "target": 75.0}
temphotend {"actual": 229.9, "target": 230.0}

Wie bekomme ich die in unterschiedliche readings ?

Mit
Zitat
define expandJASON_3D_Drucker_temp expandJSON 3D_Drucker:temp.*:.{.*} (actual|target)

bekomme ich 2 readings actual und target und es werden die aus beiden readings (tempbed und temphotend ) die werte abwechselnd eingetragen.


dev0