Erfahrung mit Tibber und Symcon?

Das Ergebnis bei 28.3. 3:00Uhr minus 2Tage

string(19) „2023-03-28 02:00:00“
string(19) „2023-03-26 03:00:00“

Gruß

Henning
P.S.: damit getestet

<?php
    $timestamp = 1679961600; //Tue Mar 28 2023 00:00:00 GMT+0000 bzw. Tue Mar 28 2023 02:00:00 GMT+0200 (Mitteleuropäische Sommerzeit)
    var_dump (date("Y-m-d H:i:s", $timestamp));
    var_dump (date("Y-m-d H:i:s", strtotime('-2 days', $timestamp)));
?>

Servus, heute kam mein Pulse IR, der funktioniert soweit.

Ich kann auch die Werte via der Tibber Api über den Tibber Developer so abfragen:

subscription{
liveMeasurement(homeId:„f1d7c039-b2cf-4775-b0a7-2f1792e89xxx“){
timestamp
power
accumulatedConsumption
accumulatedCost
currency
minPower
averagePower
maxPower}
}

Aber wir bekomme ich das per Script hin?

Nimm doch einfach dieses Script als Vorlage.
Du brauchst doch nur deine Query dort eintragen und unten den entsprechenden Variablen zuordnen.

Grüße,
Doc

Das habe ich ja versucht:

$json = '{"query":"{subscription{(homeId:"f1d7c039-b2cf-4775-b0a7-2f1792e89xxx"){timestamp power accumulatedConsumption accumulatedCost currency minPower averagePower maxPower }}"}';

bekomme aber immer ein : [error] => syntax error

Ohne es jetzt selber ausprobiert zu haben, die Anzahl der geschweiften Klammern stimmt in deinem Beispiel nicht.

Zeig doch mal dein komplettes Script.

Wo bekommt man die HomeID her, will mal selber testen?

Viele Grüße,
Doc

die home id bekommt so raus:

man geht auf Tibber Developer

kopiert oben seien Token rein und gibt das ins Scriptfenster und drückt play :wink:

{
  viewer {
    login
    name
    homes {
      id
    }
  }}

Soweit ich das verstanden habe, geht das Abfragen von diesen Messwerten nicht, so wie man die Preise abrufen kann, sondern als Websocket, weil ja livedaten sind…

Websocket subscription client requirements

hier nachzulesen:

https://developer.tibber.com/docs/guides/calling-api

Die WebSocket Adresse: wss://websocket-api.tibber.com/v1-beta/gql/subscriptions

Da stehe ich erstmal auf dem Schlauch, wie ich das in PHP / Symcon abfragen könnte…

ich habe mit dem Websocket vom Symcon gespielt (das sind die Werte von der Demo):

$client = 39672; // der WS-Client
$json = '{"type":"connection_init","payload":{"token": "476c477d8a039529478ebd690d35ddd80e3308ffc49b59c65b142321aee963a4"}}';
WSC_SendMessage ($client, $json);

$query= '{"id": "1","type": "start","payload": {"query": "subscription{liveMeasurement(homeId:"c70dcbe5-4485-4821-933d-a8a86452737b"){ timestamp power powerProduction AccumulatedConsumption AccumulatedCost}}"}}';
WSC_SendMessage ($client, $query);

Aber es kommt nichts zurück :frowning:

Die Instance der Wecbsocket ist auch immer fehlerhaft und und im Debug vom Websocket steht da immer : ERROR | Keine Berechtigung

Hier wurde es schonmal versucht: Tibber (Norway) websocket subscription - #12 von cinemarillion

So es lag an meinem Symcon auf der Nas im Docker…
Auf dem Pi geht es :wink:

Anleitung:

  1. Websocket anlegen und so konfigurieren:

image

URL: wss://websocket-api.tibber.com/v1-beta/gql/subscriptions

Sec-WebSocket-Protocol graphql-transport-ws
User-Agent com.tibber/1.8.3

Dieses Script anlegen, für die register Variable:

<?php


$usage_now = 0;
$acc_h_usage = 0;
// wenn das Skript von einer RegisterVariable-Instanz aus aufgerufen worden ist
if ($_IPS['SENDER'] == "RegisterVariable")
{
    // bereits im Puffer der Instanz vorhandene Daten in $data kopieren
    $data  = RegVar_GetBuffer($_IPS['INSTANCE']);
    // neu empfangene Daten an $data anhängen
    $data .= $_IPS['VALUE'];
 
    // wenn das Trennzeichen ; in $data gefunden worden ist
    if (strpos($data, ';'))
    {
        // $data in durch ; separierte Datensätze zerlegen
        $datasets = explode(';', $data);
 
        // alle nicht durch ; terminierten Datensätze ausgeben
        for ($i = 0; $i < count($datasets) - 1; $i++)
        {
            echo "empfangener Datensatz: ".$datasets[$i]."\n";
        }
         // $data auf den Inhalt des letzten (unvollständigen) Datensatzes setzen
        $data = $datasets[count($datasets) - 1];
    }
setvalue(37128,$data);
$data2 = json_decode($data);
print_r($data2);


$accumul = $data2->payload->data->liveMeasurement->accumulatedConsumptionLastHour;
$consumption = $data2->payload->data->liveMeasurement->power;
$ts = $data2->payload->data->liveMeasurement->timestamp;
$sale = $data2->payload->data->liveMeasurement->powerProduction;
#SetValue ($acc_h_usage, $accumul);
print $accumul;

if ($consumption > 0) {
    #SetValue ($usage_now, $consumption);
    print $consumption;

} else {
    if ($sale !=null){
        #SetValue ($usage_now, 0-$sale);
        print $sale;
    }
};
RegVar_SetBuffer($_IPS['INSTANCE'], null);
};

Das Script muss nach seinen Bedürfnissen angepasst werden ! (Variable IDs !!!)

Dann eine Register Variable Anlegen und das eben angelegte Script verbinden / auswählen und das Gateway ändern, auf den Websocket.

Dann noch das Auslöse / Abfrage Script erstellen:

<?php

$client = 15403; //objectID for the WS client

    sleep (2);
    IPS_SetProperty ($client, 'Active', 0);
    IPS_ApplyChanges($client);
    sleep (2);
    IPS_SetProperty ($client, 'Active', 1);
    IPS_ApplyChanges($client);
    sleep (2);

$json = '{"type":"connection_init","payload":{"token": "<TOKEN>"}}';
WSC_SendMessage ($client, $json);
sleep (5);
$query= '{"id": "1","type": "subscribe","payload": {"query": "subscription{liveMeasurement(homeId:\"<home id >\"){timestamp power powerProduction accumulatedConsumptionLastHour accumulatedCost}}"}}';
WSC_SendMessage ($client, $query);

Hier wieder die Variabel / Instance IDs anpassen, Token und home ID eintragen ! nur die „<“ und „>“ entfernen ! Das :"" lassen !!!

1 „Gefällt mir“

Hier eine Übersicht, welche Werte man abfragen kann:

timestamp: String!

Timestamp when usage occurred

power: Float!

Consumption at the moment (Watt)

lastMeterConsumption: Float

Last meter active import register state (kWh)

accumulatedConsumption: Float!

kWh consumed since midnight

accumulatedProduction: Float!

net kWh produced since midnight

accumulatedConsumptionLastHour: Float!

kWh consumed since since last hour shift

accumulatedProductionLastHour: Float!

net kWh produced since last hour shift

accumulatedCost: Float

Accumulated cost since midnight; requires active Tibber power deal; includes VAT (where applicable)

accumulatedReward: Float

Accumulated reward since midnight; requires active Tibber power deal

currency: String

Currency of displayed cost; requires active Tibber power deal

minPower: Float!

Min consumption since midnight (Watt)

averagePower: Float!

Average consumption since midnight (Watt)

maxPower: Float!

Peak consumption since midnight (Watt)

powerProduction: Float

Net production (A-) at the moment (Watt)

powerReactive: Float

Reactive consumption (Q+) at the moment (kVAr)

powerProductionReactive: Float

Net reactive production (Q-) at the moment (kVAr)

minPowerProduction: Float

Min net production since midnight (Watt)

maxPowerProduction: Float

Max net production since midnight (Watt)

lastMeterProduction: Float

Last meter active export register state (kWh)

powerFactor: Float

Power factor (active power / apparent power)

voltagePhase1: Float

Voltage on phase 1; on Kaifa and Aidon meters the value is not part of every HAN data frame therefore the value is null at timestamps with second value other than 0, 10, 20, 30, 40, 50. There can be other deviations based on concrete meter firmware.

voltagePhase2: Float

Voltage on phase 2; on Kaifa and Aidon meters the value is not part of every HAN data frame therefore the value is null at timestamps with second value other than 0, 10, 20, 30, 40, 50. There can be other deviations based on concrete meter firmware. Value is always null for single phase meters.

voltagePhase3: Float

Voltage on phase 3; on Kaifa and Aidon meters the value is not part of every HAN data frame therefore the value is null at timestamps with second value other than 0, 10, 20, 30, 40, 50. There can be other deviations based on concrete meter firmware. Value is always null for single phase meters.

currentL1: Float

Current on L1; on Kaifa and Aidon meters the value is not part of every HAN data frame therefore the value is null at timestamps with second value other than 0, 10, 20, 30, 40, 50. There can be other deviations based on concrete meter firmware.

currentL2: Float

Current on L2; on Kaifa and Aidon meters the value is not part of every HAN data frame therefore the value is null at timestamps with second value other than 0, 10, 20, 30, 40, 50. There can be other deviations based on concrete meter firmware. Value is always null for single phase meters.

currentL3: Float

Current on L3; on Kaifa and Aidon meters the value is not part of every HAN data frame therefore the value is null at timestamps with second value other than 0, 10, 20, 30, 40, 50. There can be other deviations based on concrete meter firmware. Value is always null for single phase meters.

signalStrength: Int

Device signal strength (Pulse - dB; Watty - percent)

deprecated fields

Jetzt warst du schneller mit dem Post/Lösung :slight_smile:

War mit dem selben Set-Up mit dem Websocket heute morgen erfolgreich :slight_smile: Nur leider noch keine Zeit gehabt das per Post zu dokumentieren… was ja jetzt schon erfolgt ist :+1:

Aber noch eine Frage, bei mir musste bei meinen Tests die ID immer mit einer GUID füllen, eine einfache Zahl kam immer „falscher“ Request. Ging bei dir einfach die „1“ wie im Script?

Viele Grüße
Philipp

Ne bei mir ging das immer so mit der ID 1…

Was passiert ist jetzt klar …
So ein Diagramm habe ich in IPS auch noch nicht gesehen … :wink:

Aber auch die Tibber App scheint mit der Zeitumstellung noch zu kämpfen …

1 „Gefällt mir“

Bin seit 2.4. nun Tibber-Kunde und habe auch den Pulse schon installiert.
Vielen Dank für die Skripe, funktioniert bestens!!!
Plan ist bei mir auch bei günstigen Stromtarifen Großverbraucher zeitgesteuert einzuschalten und den Akku zu laden und den Akkustrom dann während der teuren Zeiten wieder zu verbrauchen. Ziel ist also im IPS ein EMS (Energy Management System) aufzubauen.

Sorry, bin in IPS/PHP nicht ganz so firm: Was muss ich genau tun, um eine Registervariable anzulegen?

Du musst mal den @philipp hier aus dem Forum anschreiben, der hat schon ein Modul in Arbeit, welches zwar noch Beta ist, aber schon sehr gut funktioniert.
Auch Realtimedaten kann es schon vom Pulse in IPS einlesen.
Evtl. kann er dich zum Betatest dazu nehmen?
Dann sparst du dir da etwas das scripten…

Ich habe übrigens den Pulse und einen IRLesekopf gleichzeitig am eHz hängen und habe die Realtimedaten so schon direkt in IPS, auch mal für den Fall eines Anbieterwechsels.

@Doctor_Snuggles wie hast Du das gemacht ?
Ps:
Mein Pulse ist heute gekommen, ich schaffe es nicht die Bridge zu installieren.

Hi, wie hast du das gelöst?
Ich hatte vor Tibber (Pulse hab ich schon installiert, Tarif leider erst ab August)
IRLeser an iobroker hängen.
Würde aber auch gern „redundant“ Zähler auslesen wollen.

Würdest du deine Erfahrung mit uns teilen ? :grinning:

Und ich würde mich auch für eine Beta Test zur Verfügung stellen.
Grüße
Sebastian

Moin, was genau geht denn nicht?
Zähler freigeschaltet, mal mit ios probiert?
Habe mal in einem forum gelesen, dass über android nicht und über ios funktioniert hat.

Bridge nach Anleitung mal zurückgesetzt?

Ich komme in der App bis zum Status verbinden der Bridge. Dann passiert nix mehr.
Ich kann mich mit dem AP der Bridge verbinden und mich auch im Webserver einloggen.
Habe es mit IOS und Android versucht. Reset mehrfach gemacht auch über die Console des Webservers.

Aus einem anderen Forum:

Ja, also ich habe auch festgestellt, dass es am besten funktioniert, wenn man sowohl die Bridge, als auch den Pulse zurücksetzt… wenn man das ein paar mal gemacht hat, geht es recht gut. Und dann im Pulse IR eine Batterie solange entfernt lassen, bis die Bridge Einrichtung beendet ist… Batterie dann erst einlegen, wenn Ausgegeben wird, dass man diese Batterie lasche entfernen soll. Dann klappt das eigentlich sehr zuverlässig. Und ggf. schauen, dass die Tibber App wirklich auf aktuellem Stand ist… weil es da einen nervigen Bug gab… der scheint aber behoben in der aktuellen App.

@philipp Hallo Philipp, ich stelle mich gerne als Beta-Tester für Dein Tibbermodul zur Verfügung. Pulse ist installiert und ab 1.5. habe ich auch den stündlichen Stromtarif.
VG, Oliver