Creating Sensor with API - or multiple sensors from text

I would love to see that as a forum text.
Example:


So green for latest release, orange for previous and red for older.
That way it’s easier to find issues for people that answer.

2 Likes

This would be cool!
Maybe suggest it as a recommendation

If we just add our nabu casa account link in our profile then it could be fetched I guess.

1 Like

Slightly back on topic, using the template in the Dev Tools, the below gives me just the numbers.
(bad code I know)

 {{ states.sensor.utilita_test.state.split('£')[2]|replace("']", ' ')|trim  }}
 {{ states.sensor.utilita_test.state.split("£")[1]|replace("'", '')|replace(",", '')|trim }}

However, when I add them to a template, the following happens

  • sensor.utilita_test entity ‘disables’ in Home Assistant
  • ‘State’ on the two sensors created show ‘unavailable’
- platform: template
  sensors:
    utilita_gas:
       friendly_name: "Utilita Gas"
       unit_of_measurement: '£'
       value_template: >-
            {{ states.sensor.utilita_test.state.split("£")[1]|replace("'", '')|replace(",", '')|trim }}

image

Did you remove it from config?

And use {{ states('sensor.utilita_test').split("£")[1]|replace("'", '')|replace(",", '')|trim }} that way it won’t create errors when unavailable

1 Like

Ha, no, you have a good point there!

I noticed when I was rebooting HA to enable the new templates, I also had to run the API call to “create” the sensor.utilita_test entity

The below now works if I trigger the API call after I’ve rebooted HA.

- platform: template
  sensors:
    utilita_electric:
       friendly_name: "Utilita Electric"
       unit_of_measurement: '£'
       value_template: >-
              {{ states('sensor.utilita_test').split("£")[1]|replace("'", '')|replace(",", '')|trim }}
              
- platform: template
  sensors:
    utilita_gas:
       friendly_name: "Utilita Gas"
       unit_of_measurement: '£'
       value_template: >-
              {{ states('sensor.utilita_test').split("£")[2]|replace("'", '')|replace(",", '')|replace("]", '')|trim }}

I made a webpage that can give us a signature image with the version number we have installed.
If you can’t see the image then you need to enable the signatures in your profile.

You need three sensors:
Borrowing from tom_I, WTH don't I get notifications about available updates? - #3 by tom_l

sensor:
  - platform: version
    name: Installed Version
    image: intel-nuc # change for your system, see https://www.home-assistant.io/integrations/version/
    source: local
    
  - platform: version
    name: Latest Version
    image: raspberrypi4 # change for your system, see https://www.home-assistant.io/integrations/version/
    source: hassio

  - platform: rest
    name: forum_image
    resource_template: >-
                        http://www.hoppvader.nu/hass/version.php?version={{states('sensor.installed_version') }}&latest={{states('sensor.latest_version') }}&user=Hellis81
    value_template: '1'  # dummy value
    scan_interval: 86400     

You need to change the username in the rest URL.

This will then result in a image being created on my webpage that you can link to as a signature using:

<img src="http://www.hoppvader.nu/hass/version.php?user=Hellis81">

And obviously changing the username.

1 Like

Great idea, but would you mind sharing the php code?
I guess a lot of people (including me :wink: ) won’t feel at ease with injecting code from a unknown website :slight_smile:
Thanks

Sure…
But PHP has the advantage that it runs on the server thus the client is safe.

<?php

if($_GET["version"] !="" and $_GET["user"] !="" and $_GET["latest"] !=""){

    header('Content-Type: image/png');
    
    $img = imagecreatefrompng('HA.png');
    
    $white = imagecolorallocate($img, 255, 255, 255);
    $red = imagecolorallocate($img, 255, 0, 0);
    $orange = imagecolorallocate($img, 255,165,0);
    $green = imagecolorallocate($img, 255, 0, 0);
    
    $age = explode(".", $_GET["latest"])[1] - explode(".", $_GET["version"])[1];
    
    if($age == 0){
        $color = $green;
    }elseif($age == 1){
        $color = $orange;
    }else{
        $color = $red;
    }
    
    
    $font = 'arial.ttf';
    $x = 80;
    $y = 50;
    imagettftext($img, 18, 0, $x+1, $y+1, $white, $font, $_GET["version"]);
    imagettftext($img, 18, 0, $x, $y, $color, $font, $_GET["version"]);
   
    
    
    imagepng($img,  $_GET["user"] . ".png");
    imagedestroy($img); 
    
}elseif($_GET["version"] == "" and $_GET["user"] !="" ){
    header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
    header('Content-Type: image/png');
    $img = imagecreatefrompng($_GET["user"] . ".png");
    imagepng($img);
}
?> 

So the if() is if you have all variables set, then it creates a png with the version number you have and with the filename [username].png.

else, it returns the image [username].png, meaning when the forum wants the image.

1 Like

I just noticed the code to the signature had been replaced with an image in a code block.
edited-